diff options
author | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2011-02-05 11:02:00 +0600 |
---|---|---|
committer | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2011-02-05 11:02:00 +0600 |
commit | 980868eb4e4db550497ba40674b5b64f2e062cd9 (patch) | |
tree | 0081afb284ed8dce0f349971d24915910f875a70 /client/my_readline.h | |
parent | 7c8c7c27b5ff72e17b126e8db0c9e40be9673a15 (diff) | |
download | mariadb-git-980868eb4e4db550497ba40674b5b64f2e062cd9.tar.gz |
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 input source type.
The solution is to stop reading data from standard input if a call
to read(2) failed.
A new test case was added into mysql.test.
client/my_readline.h:
Data members error and truncated was added to LINE_BUFFER structure.
These data members used instead of out parameters in functions
batch_readline, intern_read_line.
client/mysql.cc:
read_and_execute() was modified: set status.exit_status to 1
when the error occured while reading the next command line in
non-interactive mode. Also the value of the truncated attribute
of structure LINE_BUFF is taken into account only for non-iteractive mode.
client/readline.cc:
intern_read_line() was modified: cancel reading from input if
fill_buffer() returns -1, e.g. if call to read failed.
batch_readline was modified: set the error data member of LINE_BUFFER
structure to value of my_errno when system error happened during call
to my_read/my_realloc.
mysql-test/t/mysql.test:
Test for bug#57450 was added.
Diffstat (limited to 'client/my_readline.h')
-rw-r--r-- | client/my_readline.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/client/my_readline.h b/client/my_readline.h index 62ad19bece9..3376fc81761 100644 --- a/client/my_readline.h +++ b/client/my_readline.h @@ -25,9 +25,11 @@ 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); |