mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-382: Incorrect quoting
Various places in the server replication code was incorrectly quoting strings, which could lead to incorrect SQL on the slave/mysqlbinlog.
This commit is contained in:
@ -1157,39 +1157,47 @@ outp:
|
||||
|
||||
|
||||
|
||||
|
||||
void String::print(String *str)
|
||||
/*
|
||||
Append characters to a single-quoted string '...', escaping special
|
||||
characters as necessary.
|
||||
Does not add the enclosing quotes, this is left up to caller.
|
||||
*/
|
||||
void String::append_for_single_quote(const char *st, uint len)
|
||||
{
|
||||
char *st= (char*)Ptr, *end= st+str_length;
|
||||
const char *end= st+len;
|
||||
for (; st < end; st++)
|
||||
{
|
||||
uchar c= *st;
|
||||
switch (c)
|
||||
{
|
||||
case '\\':
|
||||
str->append(STRING_WITH_LEN("\\\\"));
|
||||
append(STRING_WITH_LEN("\\\\"));
|
||||
break;
|
||||
case '\0':
|
||||
str->append(STRING_WITH_LEN("\\0"));
|
||||
append(STRING_WITH_LEN("\\0"));
|
||||
break;
|
||||
case '\'':
|
||||
str->append(STRING_WITH_LEN("\\'"));
|
||||
append(STRING_WITH_LEN("\\'"));
|
||||
break;
|
||||
case '\n':
|
||||
str->append(STRING_WITH_LEN("\\n"));
|
||||
append(STRING_WITH_LEN("\\n"));
|
||||
break;
|
||||
case '\r':
|
||||
str->append(STRING_WITH_LEN("\\r"));
|
||||
append(STRING_WITH_LEN("\\r"));
|
||||
break;
|
||||
case '\032': // Ctrl-Z
|
||||
str->append(STRING_WITH_LEN("\\Z"));
|
||||
append(STRING_WITH_LEN("\\Z"));
|
||||
break;
|
||||
default:
|
||||
str->append(c);
|
||||
append(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void String::print(String *str)
|
||||
{
|
||||
str->append_for_single_quote(Ptr, str_length);
|
||||
}
|
||||
|
||||
/*
|
||||
Exchange state of this object and argument.
|
||||
|
Reference in New Issue
Block a user