From: Dmitry Shulga Date: December 16 2010 5:17pm Subject: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3521) Bug#57450 List-Archive: http://lists.mysql.com/commits/127103 X-Bug: 57450 Message-Id: <201012161717.oBGHHLCX014468@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1753834175==" --===============1753834175== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/shulga/projects/mysql/5.1-bugteam-bug57450/ based on revid:azundris@stripped 3521 Dmitry Shulga 2010-12-16 Fixed bug#57450 - mysql client enter in an infinite loop if the standard input is a directory. The problem is that mysql monitor try to read from stdin without checking for type of input source. The solution is to check if stdin's file descriptor related to directory and exit from program if this case is true. Additionally, it was fixed a bug in processing of error returned by read syscal. @ client/readline.cc batch_readline_init() was modified: added checking for file mode and returning from function if input stream is a directory. intern_read_line() was modified: cancel reading from input if fill_buffer() returns -1, e.g. if call to read failed. modified: client/mysql.cc client/readline.cc === modified file 'client/mysql.cc' --- a/client/mysql.cc 2010-10-19 22:36:59 +0000 +++ b/client/mysql.cc 2010-12-16 17:16:56 +0000 @@ -1131,6 +1131,7 @@ int main(int argc,char *argv[]) if (status.batch && !status.line_buff && !(status.line_buff= batch_readline_init(MAX_BATCH_BUFFER_SIZE, stdin))) { + put_info("Can't initialize batch_readline", INFO_ERROR, 0); free_defaults(defaults_argv); my_end(0); exit(1); === modified file 'client/readline.cc' --- a/client/readline.cc 2009-03-18 08:27:49 +0000 +++ b/client/readline.cc 2010-12-16 17:16:56 +0000 @@ -18,6 +18,7 @@ #include #include #include +#include #include "my_readline.h" static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size, @@ -30,6 +31,13 @@ static char *intern_read_line(LINE_BUFFE LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file) { LINE_BUFFER *line_buff; + MY_STAT input_file_stat; + + if (my_fstat(fileno(file), &input_file_stat, MYF(MY_WME)) || + MY_S_ISDIR(input_file_stat.st_mode) || + MY_S_ISBLK(input_file_stat.st_mode)) + return 0; + if (!(line_buff=(LINE_BUFFER*) my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL)))) return 0; @@ -218,11 +226,13 @@ char *intern_read_line(LINE_BUFFER *buff or when the internal buffer has hit the size limit. In the latter case return what we have read so far and signal string truncation. */ - if (!(length=fill_buffer(buffer)) || length == (uint) -1) + if (!(length=fill_buffer(buffer))) { if (buffer->eof) DBUG_RETURN(0); } + else if (length == (uint) -1) + DBUG_RETURN(0); else continue; pos--; /* break line here */ --===============1753834175== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.shulga@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.shulga@stripped\ # bdqr5w1jb2fp4ajp # target_branch: file:///Users/shulga/projects/mysql/5.1-bugteam-\ # bug57450/ # testament_sha1: 30c04a15ba7ffe7f04c00eb4729e7e0aac2819ee # timestamp: 2010-12-16 23:17:04 +0600 # base_revision_id: azundris@stripped # # Begin bundle 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 KZbd+cA= --===============1753834175==--