diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-13 12:33:56 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-13 12:33:56 +0300 |
commit | 99bb3fb656f4a2a06c808b7c5d50e18e4c44b73b (patch) | |
tree | 121d54271137b00d58b23505644be3bc3a819a9e /client | |
parent | cda072bb4ba9e01d523d8deb995f28aa7a19fe11 (diff) | |
parent | a736a3174a4e7c0d92a38901ae61f563d4afede7 (diff) | |
download | mariadb-git-99bb3fb656f4a2a06c808b7c5d50e18e4c44b73b.tar.gz |
Merge 10.4 into 10.5
Diffstat (limited to 'client')
-rw-r--r-- | client/mysql.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index e49f7979a93..a606decb350 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1672,11 +1672,14 @@ static struct my_option my_long_options[] = &opt_default_auth, &opt_default_auth, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"binary-mode", 0, - "By default, ASCII '\\0' is disallowed and '\\r\\n' is translated to '\\n'. " - "This switch turns off both features, and also turns off parsing of all client" - "commands except \\C and DELIMITER, in non-interactive mode (for input " - "piped to mysql or loaded using the 'source' command). This is necessary " - "when processing output from mysqlbinlog that may contain blobs.", + "Binary mode allows certain character sequences to be processed as data " + "that would otherwise be treated with a special meaning by the parser. " + "Specifically, this switch turns off parsing of all client commands except " + "\\C and DELIMITER in non-interactive mode (i.e., when binary mode is " + "combined with either 1) piped input, 2) the --batch mysql option, or 3) " + "the 'source' command). Also, in binary mode, occurrences of '\\r\\n' and " + "ASCII '\\0' are preserved within strings, whereas by default, '\\r\\n' is " + "translated to '\\n' and '\\0' is disallowed in user input.", &opt_binary_mode, &opt_binary_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"connect-expired-password", 0, "Notify the server that this client is prepared to handle expired " @@ -2321,8 +2324,15 @@ static bool add_line(String &buffer, char *line, size_t line_length, { // Found possbile one character command like \c - if (!(inchar = (uchar) *++pos)) - break; // readline adds one '\' + /* + 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 *out++='\\'; |