diff options
-rw-r--r-- | mysql-test/r/ctype_cp1250_ch.result | 3 | ||||
-rw-r--r-- | mysql-test/r/ctype_cp1251.result | 2 | ||||
-rw-r--r-- | mysql-test/r/ctype_eucjpms.result | 2 | ||||
-rw-r--r-- | mysql-test/t/ctype_cp1250_ch.test | 10 | ||||
-rw-r--r-- | mysql-test/t/ctype_cp1251.test | 10 | ||||
-rw-r--r-- | mysql-test/t/ctype_eucjpms.test | 10 | ||||
-rw-r--r-- | sql/sql_string.h | 3 | ||||
-rw-r--r-- | sql/sys_vars.cc | 2 |
8 files changed, 41 insertions, 1 deletions
diff --git a/mysql-test/r/ctype_cp1250_ch.result b/mysql-test/r/ctype_cp1250_ch.result index 7f0cdf3f17b..231755a3f69 100644 --- a/mysql-test/r/ctype_cp1250_ch.result +++ b/mysql-test/r/ctype_cp1250_ch.result @@ -238,3 +238,6 @@ select a from t1 where a like "abcdefghá"; a abcdefghá drop table t1; +set global LC_MESSAGES=convert((@@global.log_bin_trust_function_creators) +using cp1250); +ERROR HY000: Unknown locale: '1' diff --git a/mysql-test/r/ctype_cp1251.result b/mysql-test/r/ctype_cp1251.result index 9a781c61e91..202dfe2b7df 100644 --- a/mysql-test/r/ctype_cp1251.result +++ b/mysql-test/r/ctype_cp1251.result @@ -386,6 +386,8 @@ FD FD FD D18D FD FE FE FE D18E FE FF FF FF D18F FF DROP TABLE t1; +set global LC_TIME_NAMES=convert((-8388608) using cp1251); +ERROR HY000: Unknown locale: '-8388608' # # End of 5.1 tests # diff --git a/mysql-test/r/ctype_eucjpms.result b/mysql-test/r/ctype_eucjpms.result index bd25b1beed4..5a402d57e65 100644 --- a/mysql-test/r/ctype_eucjpms.result +++ b/mysql-test/r/ctype_eucjpms.result @@ -9859,6 +9859,8 @@ hex(convert(_eucjpms 0xA5FE41 using ucs2)) select hex(convert(_eucjpms 0x8FABF841 using ucs2)); hex(convert(_eucjpms 0x8FABF841 using ucs2)) 003F0041 +set global LC_TIME_NAMES=convert((convert((0x63) using eucjpms)) using utf8); +ERROR HY000: Unknown locale: 'c' # # Start of 5.5 tests # diff --git a/mysql-test/t/ctype_cp1250_ch.test b/mysql-test/t/ctype_cp1250_ch.test index 1fb656f2a01..a4c59f494a7 100644 --- a/mysql-test/t/ctype_cp1250_ch.test +++ b/mysql-test/t/ctype_cp1250_ch.test @@ -72,3 +72,13 @@ select a from t1 where a like "abcdefghá"; drop table t1; # End of 4.1 tests + +# +# Bug #48053 String::c_ptr has a race and/or does an invalid +# memory reference +# (triggered by Valgrind tests) +# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test) +# +--error 1649 +set global LC_MESSAGES=convert((@@global.log_bin_trust_function_creators) + using cp1250); diff --git a/mysql-test/t/ctype_cp1251.test b/mysql-test/t/ctype_cp1251.test index 3203a1032b4..7ffb60374e2 100644 --- a/mysql-test/t/ctype_cp1251.test +++ b/mysql-test/t/ctype_cp1251.test @@ -65,6 +65,16 @@ DROP TABLE t1; --source include/ctype_8bit.inc +# +# Bug #48053 String::c_ptr has a race and/or does an invalid +# memory reference +# (triggered by Valgrind tests) +# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test) +# +--error 1649 +set global LC_TIME_NAMES=convert((-8388608) using cp1251); + + --echo # --echo # End of 5.1 tests --echo # diff --git a/mysql-test/t/ctype_eucjpms.test b/mysql-test/t/ctype_eucjpms.test index a330925327c..fea48061c69 100644 --- a/mysql-test/t/ctype_eucjpms.test +++ b/mysql-test/t/ctype_eucjpms.test @@ -382,6 +382,16 @@ select hex(convert(_eucjpms 0xA5FE41 using ucs2)); select hex(convert(_eucjpms 0x8FABF841 using ucs2)); +# +# Bug #48053 String::c_ptr has a race and/or does an invalid +# memory reference +# (triggered by Valgrind tests) +# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test) +# +--error 1649 +set global LC_TIME_NAMES=convert((convert((0x63) using eucjpms)) using utf8); + + --echo # --echo # Start of 5.5 tests --echo # diff --git a/sql/sql_string.h b/sql/sql_string.h index dcd9975f399..67c8fe4f45f 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -113,6 +113,9 @@ public: inline const char *ptr() const { return Ptr; } inline char *c_ptr() { + DBUG_ASSERT(!alloced || !Ptr || !Alloced_length || + (Alloced_length >= (str_length + 1))); + if (!Ptr || Ptr[str_length]) /* Should be safe */ (void) realloc(str_length); return Ptr; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index ce1dcb4a33c..612ce48de0b 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3082,7 +3082,7 @@ static bool check_locale(sys_var *self, THD *thd, set_var *var) String str(buff, sizeof(buff), system_charset_info), *res; if (!(res=var->value->val_str(&str))) return true; - else if (!(locale= my_locale_by_name(res->c_ptr()))) + else if (!(locale= my_locale_by_name(res->c_ptr_safe()))) { ErrConvString err(res); my_error(ER_UNKNOWN_LOCALE, MYF(0), err.ptr()); |