summaryrefslogtreecommitdiff
path: root/client/mysql.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/mysql.cc')
-rw-r--r--client/mysql.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 8530c105820..21060013c75 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2319,11 +2319,14 @@ static bool add_line(String &buffer, char *line, size_t line_length,
{
// Found possbile one character command like \c
- inchar = (uchar) *++pos;
- // In Binary mode , when in_string is not null \0 should not be treated as
- // end statement. This can happen when we are in middle of binary data which
- // can contain \0 and its quoted with ' '.
- if (!real_binary_mode && !*in_string && !inchar)
+ /*
+ The null-terminating character (ASCII '\0') marks the end of user
+ input. Then, by default, upon encountering a '\0' while parsing, it
+ should stop. However, some data naturally contains binary zeros
+ (e.g., zipped files). Real_binary_mode signals the parser to expect
+ '\0' within the data and not to end parsing if found.
+ */
+ if (!(inchar = (uchar) *++pos) && (!real_binary_mode || !*in_string))
break; // readline adds one '\'
if (*in_string || inchar == 'N') // \N is short for NULL
{ // Don't allow commands in string