From: Dmitry Shulga Date: December 14 2010 1:38pm Subject: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3521) Bug#57450 List-Archive: http://lists.mysql.com/commits/126774 X-Bug: 57450 Message-Id: <201012141339.oBEDdvw5023453@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2071307395==" --===============2071307395== 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-14 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, i.e. if call to read failed. modified: client/readline.cc === modified file 'client/readline.cc' --- a/client/readline.cc 2009-03-18 08:27:49 +0000 +++ b/client/readline.cc 2010-12-14 13:38:17 +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(0)) || + 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 */ --===============2071307395== 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\ # ozj89hdh0z9hmw1m # target_branch: file:///Users/shulga/projects/mysql/5.1-bugteam-\ # bug57450/ # testament_sha1: 33f4b42e8986c31a4ecbf84f9ada87c78f194378 # timestamp: 2010-12-14 19:38:25 +0600 # base_revision_id: azundris@stripped # # Begin bundle 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 bmb/ivcWlxoKvBRXt+xof/F3JFOFCQcLbTyA --===============2071307395==--