From: Dmitry Shulga Date: February 5 2011 5:07am Subject: bzr commit into mysql-trunk branch (Dmitry.Shulga:3599) Bug#57450 List-Archive: http://lists.mysql.com/commits/130490 X-Bug: 57450 Message-Id: <201102050507.p14LGSQW001716@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6132809547646546951==" --===============6132809547646546951== 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-trunk/ based on revid:anitha.gopi@stripped 3599 Dmitry Shulga 2011-02-05 [merge] Auto-merge from mysql-5.5 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 04:02:29 +0000 +++ b/client/mysql.cc 2011-02-05 05:06:29 +0000 @@ -1843,14 +1843,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 @@ -1913,9 +1912,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; } @@ -1936,7 +1939,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 07:01:44 +0000 +++ b/mysql-test/t/mysql.test 2011-02-05 05:06:29 +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 # --===============6132809547646546951== 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\ # ympv0fhtb0vw64ff # target_branch: file:///Users/shulga/projects/mysql/mysql-trunk/ # testament_sha1: bd4acd626ffa4e9acd75414bffa1a175a1c7808b # timestamp: 2011-02-05 11:07:25 +0600 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.5/ # base_revision_id: anitha.gopi@stripped\ # ebrnbqg9khw2zg04 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWTekShAAC01fgFQyfXf///en viC////6YBHu1QbNS++7SW47tyAoOmg0dFrvOtoenrdu9ecbbVGhp7QxsymyspXhkQhNCaNqaPSe g1NMEAaGmNCaAMgHqCSQCZABCaaExU/Q1QaADQAAPUNA4yZNGIaaGAmhiaNMmIGRhNGmmEGTCRER pGTU0aNJ5Q1PTNI0aEyDRoANDQGQRSQExMQAJqp+xNCYp6AU09T1B6Q9QDQAikJkE0mp6aaaT1Ho po0bGqHpqNNHpGgAANHsyGZAQK29WAjZXrySCzxAz3EiWREFJFBYocRDQ9dn3nvIXuaZma9ZwjXT 42jHipsIpFHPFx069tNU3X2Hx/DpHwOByDlLV/QknDtsIzMzhwKbI0GGYFTd1Xocs5WjyXWdNNLn U/u9ARhgOGXM55ikaWqqxNXVllR74NB0KQPpGpW5fTpkXH7O4d4iQEwS/pr3ph7Lo9WMdBpTH+xv 3P1+YRkBuFixwIhMSYxtsbbQ2L145H8JZNBuvhQbd/g314dGRgtUJMZfKltw30WmKYT36QXOuMQy sRe7n4Xc6urMnbM1JUrfotbBmDllJpEmhlY00rWl8Xu+sXN4RhoTvcl9ob0OJtNzcwsJthQl3PRf BWIwhTWLqqEoLg0ex12Lt/f7rzo24Sy2HOUuEgp3r6sNypDcldLVoy0Q2GWVi/2kfTOTmtDGemch HpLp24+jLSZnbDQhnbk93d7vpMnQ2grNXekoWPnSESMnGCYquW+5x+jrjgQ+Qj9VtlnDfRaOLK6l hFcBvlznje+5CzMqN4ZwR7PbTHV3Z5cv2Ygh1oLq6iujjp2fmQhS+G5KjyftuPL8JXOm3Y/Suw6f F3eWnb566zYmsjx+RpvWtulptPlWVm2x848bY92yXSeCQWvtKSR6VvRzdLS4zcYsP0pSYXthwoPD k17az+/zO2jLlMldK75PheIlK/SmD5h9excdErIhJYr51V8slxDpmcAhdgacyIK863dL2SSNS2IF rzYdEjoXKFjnZJ0cTLeXplUIA48L8ccoo+a2Y8KbHdVYL1U1DYDE5FpESJppUwyjqZ8WAKkM0kCk Nge716hMa2CUpBEQaMmujQPZEQ4nM6+OvYzEQa2DdzJaN7FLSTaXMxVZLuvIJqoolVIL5qVUpBZA c9prgXSDafCzJ4oEBJAgRYW+ZMcFCiIw4SQMi1MCVWaBDubiZdKShRhAYJFkoSUZny2JdR1AZgMc ul68umuOkwJydpvQJ64oEJQ5FwNBjG4xIMDz9by/AwMsibh8VgpH2Acr/9AZiC2rrMqMJ7AVZQYv 1c9iMZvUxuN15k1nCrp6qiqwwg0GWrkITgRPxF18lABK8xuHmg4kvx0W9Sa9P34XDGKjI77DZxXO kU3usutJdddBI0HOy3gHQXJprVr3vKzUNdb11/BIM80ype+J0rG1KVqJZujcPAYsLoEblu74yITm 20FldJJzkuyAZw2F5zyVUzc2TSo2wTheRljVqKCaRx2iRwJyC/jfbUA6v98quZiu3VLOzBKUsInd pSGMesBW14VqGpZQBDCo7kRghC+LtZdnY/BjC2XC53qduxc9/d7jiDXtOxI4dEvJEMCQ/tc7LBHw QFaeDSzOPAy+bEEqTGiuOd0HyvMy6TMGRHzrXWezX7HwIGML3OiA4eykW8noCxMcRRMuB0O8Mkw4 uHOzkRPbdL5okREeSot3Wdm4Z+MMWGfgomiTdUBnLPDCJHaCm17qvHpOMCHsWJGJ65pBIyOt2y45 yDuNjMftUwMYSIanFNRmJzkO4MXvZWmVoWltwQ4JYDyZoc9Ce4lmvO6ATK9ybfFzJC2LJA6Lkq1u Nm2Z1M0KNtJojpm0AfDTtuPSOQ9ORzvLlgqKoyAw4oPT73qT4mPRQDA70aFC4vkn1qfHFxCRIvE4 wUFQkbjtiEj18HVqsTPwKkYj/Aqtxky18guQsctDBMaFacjI2nogInJRGLDHQzKkAOaTJBJLJfK9 GvF/EHNlG6OVZj5ui7fYyQGoVnxhgpthS0IGwhRdRQoVzdBVdwbDaUMD0NysdSZdtkODEmjEns9B Y5qhhoc+/VvH/3c/jMd/5zza7A5/WHwaaypsSMlQ0cQk9Lkwh18+MCBKfLogyQZDWbbDspMS0sp8 F6rwTWfoW9knckJiodPZLM4wdF1OXDsx0n+MZooQJkTg6cUULjuumREVTyHivg/DmR6HmBVILp1k M/njaNfNaTu9alh3iQsmN9RklisBLi7UjqNiWPEg40ORHL11vCNS4sZHCJ9UQSx1rOTQe4iyflnl sgN1g8jHobXpZ1qqY20UVjMUFiZRIK1bJ9IkmIHqk6slMYYzKy3YGWJG0OG74JSZgFxe4F5kcmPu XM4rdt2m02IHRe/ouqQa/cR1M0s69+rt4Y6vbJ7EpbxVXePjA5wODQxu0Gva3s4cdoXZ6ajzHAi9 WY0Ml7oB9zS11yLaTmBgNsRiPLJh4+C0JToOJ4pjvWZMiaixxHhgksnMj248EB37swzjDDQRFnxR DkiTgQOAnKhiPIzT+0B8RpjJaztKj3XDq5UvIDac4bjIqgHVH4AyA3VOXLMjI7nLSOJYhqY2fdes dW3etzel+ZX2cbnELzoULmffyKrz1vzYbSqcCza5RyalDTpoqpKbElE5BKqnN6bCiUoaU02vG9sA XhJoFGU0b6VnggYYMPX3YRfEYuSnVqD0oX0cLD6ri3jXeAhjA6wvYNjkSASyVfJ94nueo00Pm9qq QSu9B9rnq7zKEwEKIhKABECJOT763vR8DUX26gdOcln00n+JgTQTD+KHxoARw2Ufslrqn6gNWCd4 zF21WOQARCed4me7Gvg+yODSgfE9QklGGY0onYkkPNK5UpUkcpiKgOOITBQQc458dNBjDBk6uBmM dD4y5gIBunKMzUVZLiPhYZLdSqaMTMS+t5rmoJft+io53cOcgeyrpJiNNBKq2QJnj3m45d7f6i4S +zoKk31zPShsefamXDPoYRfq+f5NUODfMQ1H0i1KByBQ5Zpd+M6mfWltlSSH0pA6FhwNug+ydSf8 nj2neV4d1z4SCknJGKhWU8Lfb/0/fLDIXpBb588Cc2OgfI8+8ceO3i2u18F9HYeK1w+W2UH3/40B 9vwxS7gCs3ojy83At+DtpGUDwKnPsO8T4xJjyRInCBc4h8/L6lpKCj2HadTA2Aclyn4KGGnE25j1 MDWd20uzruk+SSx4ERiNyY0PCSI0nYvV/ilYgE/SdtTbn3Iz0mI1rVZy5kBySFw+ZMsS3ENc8sRD LTwZp43lBrLDh2kvutZw5HBiGRF4tzzwAOyspJZWPfqzVFZJGk2W7HJwPXZThMz16lLsh4+FHm6i 1zQiN6NHyTczivcPNFET8DYkBrAgkkBIYJMErF2LxXW5btPHCn4Te44ieJPPwoM9Z5yeowiYvkND 8DnBuzEXa7+cogohCzgDUpBFoW+G1SetiwdsWSWlgwLKEDg1+BKEaqi4VaGGmMJUk1FTYkEGWkuk gyLuBuEegRswWkb54TGJz0uBLZATOhNkHcwC7vZ2dfkuehCkiFw2GvO8jLfMg7rWh8FRdxn5lU41 90zuRPsteur11tnqPPjxXW+LpvtuwasdszOXfmzJ6Gg1dro3PKdN5RC9jDAnQ7kJAGTRB2yBw5zp kNQXrMvo29IDRBBbRGLlcHNctP4wrJjKSpC1IUOEsug5s9ap3eIzFoXKZtifbAwY4A74CZvOkcPh 0vgED19PYwHno5goTKEx57AxcVsRJkDxTy324IaiBaTyIYSC6ooLDMjRSjgBM/yEut1CMIEflMc5 7mQBVeZAalKJToBpQ9/YuxZpUbM/4PaIPNeibgGSBhv+Pm7eOZqct6Z0o9Vw64sQmiFAedwJrxiF tkHPojqFikFEdrbDhVZW0QWrk1oFxglY2dQNo/ucQUh714ty1p8/BO5V33BW2Lg7/V4zFPrLseL6 qMOl0g1Oz3x8iJQ5vgAY8PFNy2qYwg95DcOW1Otv97kBESCJhntMkzipJKPp+U/NAL/qUVZY7JmA Ihdg5StOjxUNIHx+TUYw7YnRG0+H39yhXejt5L8qsqB8/jkXyTwcU8notUqvFMOS0Gnu3rkfRpXx QLfg+1PiuC7Q97JbW7cRpdM2ahnRZwa00LAuRKKmKB1MPpBO8efs62o6ERgRdq9Xk2p8h2CBaeZG ALE12bGx++YlgHn7x3O6C4PNxZXvTTIuOTrPz7GlrNjx8nuuchPEKAd5Du7lr6JS2CYNPmUrnaID 9g7gUpfd1ypYN7gj3gXPIm2oeBpTwJhfENGi0kyWk5PJreMQOIxNcxC/OtSotyE19fUiEKqK7YxE ML1xCI9sFUCAgUMr2xMJELNNDyDMq3Xxg8MKpSkudcSVpCMkIQiACEPKufpXLr4PGBiOmCe6lCHq 0xq4JOQa49N/WbMLJuVAt7OUMyEDBzM607aGGRq06Eo8rxJOtgiMrRJPciMyBuWhbtc6lkrtjzGf VK7z74zthi2OlyCBmmG5AsOLAkAnVKkYXv96hmrHavsWb05dPouXK9qXgYNxguh8F0rvc+K/isk1 qByJdC8AI40GWwG2HBjTHEKSVDTaXzu5qlAFkQgXaHcPSm6jcsncHd0QkmE4nWnGaGJbAAO69we1 kjpTega2W/LGRzLRdS0JRA3Z3mz769iWTNCn68iBxS2TFakQwxAQqkO8vOLyNZi2xEMjCJqilqSg ChkFfH5+xb77yubmeZ5Gy5J0lXzxGpoOMG8PGQHCEiAjYJ8QU3rRqULllQJ3madh0wkQBFF+mxmO YnMgvkyZSZMpEiXgoG9NKjS88Jepj8XJQfhvwJ0IC104PuQq2Sk2Jc/e3brlFApMGRWlzkarTWFm w3Tka4lwfQ3uNwkOQJe2bg0SEOIE060napFmdww78CGK3SHkx3KcN7EgiFiGkHgqJDldL5FsFnPa qq8y2uCGXGvGEC1RiHoJOuhSH23sEeK9lCqaNOy8AnRix0BJSvm80s8lnwoPBO9Kk3Niah65ncZA H7R4JpSdgQfJzGxGtZosmja6rpK1T+QRGuTnbR6ioHCydne4Jial3lfIhky5lCa9r9QHi3JRmEON rOoaEzL1AuTATpDjGRMi/JYTavFeS8lnpUOX2QNy5F4H11F80kzUbtjSpRIAuQehuXpDfATWF2jc SVS9O9Zjgje2YgUzqBqMDbOu/yoXTfOtgtrqSS5m0YYo9w4iZSUsTBP8XckU4UJA3pEoQA== --===============6132809547646546951==--