From: Dmitry Shulga Date: February 5 2011 5:05am Subject: bzr commit into mysql-5.5 branch (Dmitry.Shulga:3304) Bug#57450 List-Archive: http://lists.mysql.com/commits/130489 X-Bug: 57450 Message-Id: <201102050505.p154OgR7027325@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0334347605534376031==" --===============0334347605534376031== 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:serge.kozlov@stripped 3304 Dmitry Shulga 2011-02-05 [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-05 05:04:15 +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-05 05:04:15 +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-05 05:04:15 +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-05 05:04:15 +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 # --===============0334347605534376031== 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\ # gfqp8x23rhj84cw2 # target_branch: file:///Users/shulga/projects/mysql/mysql-5.5/ # testament_sha1: 25fd4b46235fbeca721cdbc969f0bea2da936945 # timestamp: 2011-02-05 11:05:40 +0600 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug58887/ # base_revision_id: serge.kozlov@stripped\ # 7klee4l972ybtxri # # Begin bundle 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 XOiziN/xdyRThQkHOTUXwA== --===============0334347605534376031==--