From: Dmitry Shulga Date: February 4 2011 10:25am Subject: bzr commit into mysql-5.5 branch (Dmitry.Shulga:3301) Bug#57450 List-Archive: http://lists.mysql.com/commits/130383 X-Bug: 57450 Message-Id: <201102041026.p146s83x002968@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1720072918513189035==" --===============1720072918513189035== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/shulga/projects/mysql/mysql-5.5/ based on revid:dmitry.shulga@stripped 3301 Dmitry Shulga 2011-02-04 [merge] Auto-merge from mysql-5.1 for bug#57450. modified: client/my_readline.h client/mysql.cc client/readline.cc mysql-test/t/mysql.test === modified file 'client/my_readline.h' --- a/client/my_readline.h 2009-09-23 21:32:31 +0000 +++ b/client/my_readline.h 2011-02-04 10:23:54 +0000 @@ -28,11 +28,13 @@ typedef struct st_line_buffer uint eof; ulong max_size; ulong read_length; /* Length of last read string */ + int error; + bool truncated; } LINE_BUFFER; extern LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file); extern LINE_BUFFER *batch_readline_command(LINE_BUFFER *buffer, char * str); -extern char *batch_readline(LINE_BUFFER *buffer, bool *truncated); +extern char *batch_readline(LINE_BUFFER *buffer); extern void batch_readline_end(LINE_BUFFER *buffer); #endif /* CLIENT_MY_READLINE_INCLUDED */ === modified file 'client/mysql.cc' --- a/client/mysql.cc 2011-01-16 03:59:05 +0000 +++ b/client/mysql.cc 2011-02-04 10:23:54 +0000 @@ -1839,14 +1839,13 @@ static int read_and_execute(bool interac ulong line_number=0; bool ml_comment= 0; COMMANDS *com; - bool truncated= 0; status.exit_status=1; - + for (;;) { if (!interactive) { - line=batch_readline(status.line_buff, &truncated); + line=batch_readline(status.line_buff); /* Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF. Editors like "notepad" put this marker in @@ -1909,9 +1908,13 @@ static int read_and_execute(bool interac if (opt_outfile && line) fprintf(OUTFILE, "%s\n", line); } - if (!line) // End of file + // End of file or system error + if (!line) { - status.exit_status=0; + if (status.line_buff && status.line_buff->error) + status.exit_status= 1; + else + status.exit_status= 0; break; } @@ -1932,7 +1935,8 @@ static int read_and_execute(bool interac #endif continue; } - if (add_line(glob_buffer,line,&in_string,&ml_comment, truncated)) + if (add_line(glob_buffer, line, &in_string, &ml_comment, + status.line_buff ? status.line_buff->truncated : 0)) break; } /* if in batch mode, send last query even if it doesn't end with \g or go */ === modified file 'client/readline.cc' --- a/client/readline.cc 2010-07-08 21:20:08 +0000 +++ b/client/readline.cc 2011-02-04 10:23:54 +0000 @@ -24,7 +24,7 @@ static bool init_line_buffer(LINE_BUFFER ulong max_size); static bool init_line_buffer_from_string(LINE_BUFFER *buffer,char * str); static size_t fill_buffer(LINE_BUFFER *buffer); -static char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated); +static char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length); LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file) @@ -42,13 +42,12 @@ LINE_BUFFER *batch_readline_init(ulong m } -char *batch_readline(LINE_BUFFER *line_buff, bool *truncated) +char *batch_readline(LINE_BUFFER *line_buff) { char *pos; ulong out_length; - DBUG_ASSERT(truncated != NULL); - if (!(pos=intern_read_line(line_buff,&out_length, truncated))) + if (!(pos=intern_read_line(line_buff, &out_length))) return 0; if (out_length && pos[out_length-1] == '\n') if (--out_length && pos[out_length-1] == '\r') /* Remove '\n' */ @@ -162,7 +161,10 @@ static size_t fill_buffer(LINE_BUFFER *b if (!(buffer->buffer = (char*) my_realloc(buffer->buffer, buffer->bufread+1, MYF(MY_WME | MY_FAE)))) - return (uint) -1; + { + buffer->error= my_errno; + return (size_t) -1; + } buffer->start_of_line=buffer->buffer+start_offset; buffer->end=buffer->buffer+bufbytes; } @@ -177,7 +179,10 @@ static size_t fill_buffer(LINE_BUFFER *b /* Read in new stuff. */ if ((read_count= my_read(buffer->file, (uchar*) buffer->end, read_count, MYF(MY_WME))) == MY_FILE_ERROR) + { + buffer->error= my_errno; return (size_t) -1; + } DBUG_PRINT("fill_buff", ("Got %lu bytes", (ulong) read_count)); @@ -198,8 +203,7 @@ static size_t fill_buffer(LINE_BUFFER *b } - -char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated) +char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length) { char *pos; size_t length; @@ -214,22 +218,25 @@ char *intern_read_line(LINE_BUFFER *buff if (pos == buffer->end) { /* - fill_buffer() can return 0 either on EOF in which case we abort - 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. + fill_buffer() can return NULL on EOF (in which case we abort), + on error, 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 == (size_t) -1) + DBUG_RETURN(NULL); else continue; pos--; /* break line here */ - *truncated= 1; + buffer->truncated= 1; } else - *truncated= 0; + buffer->truncated= 0; buffer->end_of_line=pos+1; *out_length=(ulong) (pos + 1 - buffer->eof - buffer->start_of_line); DBUG_RETURN(buffer->start_of_line); === modified file 'mysql-test/t/mysql.test' --- a/mysql-test/t/mysql.test 2010-12-01 06:58:21 +0000 +++ b/mysql-test/t/mysql.test 2011-02-04 10:23:54 +0000 @@ -425,6 +425,12 @@ drop table t1; --echo --exec $MYSQL --skip-column-names --vertical test -e "select 1 as a" +# +# Bug#57450: mysql client enter in an infinite loop if the standard input is a directory +# +--error 1 +--exec $MYSQL < . + --echo --echo # --===============1720072918513189035== 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\ # 969v2ipp5zld3vml # target_branch: file:///Users/shulga/projects/mysql/mysql-5.5/ # testament_sha1: ee097d10f2e7a94ad6cf1b635e50148d034fa5a7 # timestamp: 2011-02-04 16:26:11 +0600 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug58887/ # base_revision_id: dmitry.shulga@stripped\ # 1ssnkooxtwhu6oa1 # # Begin bundle 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 --===============1720072918513189035==--