mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Bug#18004 Connecting crashes server when default charset is UCS2
table.cc: Fixing to use system_charset_info instead of default_charset_info. Crash happened because the "ctype" array is empty in UCS2, and thus cannot be used with my_isspace(). The reason why UCS2 appeared in this context was because of of default_charset_info variable incorrectly substituted to my_isspace(). As functions check_db_name(), check_table_name() and check_column_name() always get values in utf8, system_charset_info must be used instead. ctype_ucs2_def.test, ctype_ucs2_def-master.opt, ctype_ucs2_def.result: new file
This commit is contained in:
parent
56fca811bb
commit
33e446b356
4 changed files with 19 additions and 3 deletions
6
mysql-test/r/ctype_ucs2_def.result
Normal file
6
mysql-test/r/ctype_ucs2_def.result
Normal file
|
@ -0,0 +1,6 @@
|
|||
show variables like "%character_set_ser%";
|
||||
Variable_name Value
|
||||
character_set_server ucs2
|
||||
DROP TABLE IF EXISTS t1;
|
||||
create table t1 (a int);
|
||||
drop table t1;
|
1
mysql-test/t/ctype_ucs2_def-master.opt
Normal file
1
mysql-test/t/ctype_ucs2_def-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--default-character-set=ucs2 --default-collation=ucs2_unicode_ci
|
9
mysql-test/t/ctype_ucs2_def.test
Normal file
9
mysql-test/t/ctype_ucs2_def.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
#
|
||||
# Bug#18004 Connecting crashes server when default charset is UCS2
|
||||
#
|
||||
show variables like "%character_set_ser%";
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
drop table t1;
|
|
@ -1423,7 +1423,7 @@ bool check_db_name(char *name)
|
|||
while (*name)
|
||||
{
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
last_char_is_space= my_isspace(default_charset_info, *name);
|
||||
last_char_is_space= my_isspace(system_charset_info, *name);
|
||||
if (use_mb(system_charset_info))
|
||||
{
|
||||
int len=my_ismbchar(system_charset_info, name,
|
||||
|
@ -1469,7 +1469,7 @@ bool check_table_name(const char *name, uint length)
|
|||
while (name != end)
|
||||
{
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
last_char_is_space= my_isspace(default_charset_info, *name);
|
||||
last_char_is_space= my_isspace(system_charset_info, *name);
|
||||
if (use_mb(system_charset_info))
|
||||
{
|
||||
int len=my_ismbchar(system_charset_info, name, end);
|
||||
|
@ -1500,7 +1500,7 @@ bool check_column_name(const char *name)
|
|||
while (*name)
|
||||
{
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
last_char_is_space= my_isspace(default_charset_info, *name);
|
||||
last_char_is_space= my_isspace(system_charset_info, *name);
|
||||
if (use_mb(system_charset_info))
|
||||
{
|
||||
int len=my_ismbchar(system_charset_info, name,
|
||||
|
|
Loading…
Reference in a new issue