diff options
author | Alexander Barkov <bar@mariadb.org> | 2015-09-23 13:04:28 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2015-09-23 13:04:28 +0400 |
commit | 212698b152609a7b17b45f9499fd650229985558 (patch) | |
tree | 5f1274679dc91f59cb177c8653d9a9f47db1ccbe /sql/sql_string.h | |
parent | 180c44e0f600dc9e220887e213679f0d60f29a68 (diff) | |
download | mariadb-git-212698b152609a7b17b45f9499fd650229985558.tar.gz |
MDEV-8253 EXPLAIN SELECT prints unexpected characters
Item_string::clone_item() creates a new Item_string that
points exactly to the same buffer that the original one does.
Later, Item_string::print() uses c_ptr() for the original Item_string,
which reallocs the original buffer, and the clone remain with
the old freed buffer.
Refactoring the code not to use c_ptr() in Item_string::print().
Diffstat (limited to 'sql/sql_string.h')
-rw-r--r-- | sql/sql_string.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sql/sql_string.h b/sql/sql_string.h index 99fe6b60d37..51a11c7a4ff 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -568,7 +568,15 @@ public: str_length+= arg_length; return FALSE; } - void print(String *print) const; + void print(String *to) const; + void print_with_conversion(String *to, CHARSET_INFO *cs) const; + void print(String *to, CHARSET_INFO *cs) const + { + if (my_charset_same(charset(), cs)) + print(to); + else + print_with_conversion(to, cs); + } bool append_for_single_quote(const char *st, uint len); bool append_for_single_quote(const String *s) |