mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Fix for bug#31615: crash after set names ucs2 collate xxx
Problem: currently, UCS-2 cannot be used as a client character set. Fix: raise an error if one attempts to set it to USC-2. mysql-test/r/ctype_ucs.result: Fix for bug#31615: crash after set names ucs2 collate xxx - test result. mysql-test/t/ctype_ucs.test: Fix for bug#31615: crash after set names ucs2 collate xxx - test case. sql/set_var.cc: Fix for bug#31615: crash after set names ucs2 collate xxx - raise an error if one is going to set character_set_client to UCS-2. sql/set_var.h: Fix for bug#31615: crash after set names ucs2 collate xxx - raise an error if one is going to set character_set_client to UCS-2.
This commit is contained in:
parent
99a7866a93
commit
e8adc3f74b
4 changed files with 43 additions and 0 deletions
|
@ -803,4 +803,12 @@ quote(name)
|
||||||
????????
|
????????
|
||||||
????????????????
|
????????????????
|
||||||
drop table bug20536;
|
drop table bug20536;
|
||||||
|
set names ucs2;
|
||||||
|
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||||
|
set names ucs2 collate ucs2_bin;
|
||||||
|
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||||
|
set character_set_client= ucs2;
|
||||||
|
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||||
|
set character_set_client= concat('ucs', substr('2', 1));
|
||||||
|
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
|
|
|
@ -535,4 +535,16 @@ select quote(name) from bug20536;
|
||||||
|
|
||||||
drop table bug20536;
|
drop table bug20536;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31615: crash after set names ucs2 collate xxx
|
||||||
|
#
|
||||||
|
--error 1231
|
||||||
|
set names ucs2;
|
||||||
|
--error 1231
|
||||||
|
set names ucs2 collate ucs2_bin;
|
||||||
|
--error 1231
|
||||||
|
set character_set_client= ucs2;
|
||||||
|
--error 1231
|
||||||
|
set character_set_client= concat('ucs', substr('2', 1));
|
||||||
|
|
||||||
--echo End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
|
|
@ -1992,6 +1992,21 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool sys_var_character_set_client::check(THD *thd, set_var *var)
|
||||||
|
{
|
||||||
|
if (sys_var_character_set::check(thd, var))
|
||||||
|
return 1;
|
||||||
|
/* Currently, UCS-2 cannot be used as a client character set */
|
||||||
|
if (var->save_result.charset->mbminlen > 1)
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name,
|
||||||
|
var->save_result.charset->csname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CHARSET_INFO **
|
CHARSET_INFO **
|
||||||
sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type)
|
sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type)
|
||||||
{
|
{
|
||||||
|
@ -2355,6 +2370,13 @@ end:
|
||||||
|
|
||||||
int set_var_collation_client::check(THD *thd)
|
int set_var_collation_client::check(THD *thd)
|
||||||
{
|
{
|
||||||
|
/* Currently, UCS-2 cannot be used as a client character set */
|
||||||
|
if (character_set_client->mbminlen > 1)
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client",
|
||||||
|
character_set_client->csname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -578,6 +578,7 @@ public:
|
||||||
sys_var_character_set(name_arg) {}
|
sys_var_character_set(name_arg) {}
|
||||||
void set_default(THD *thd, enum_var_type type);
|
void set_default(THD *thd, enum_var_type type);
|
||||||
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
|
CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type);
|
||||||
|
bool check(THD *thd, set_var *var);
|
||||||
};
|
};
|
||||||
|
|
||||||
class sys_var_character_set_results :public sys_var_character_set
|
class sys_var_character_set_results :public sys_var_character_set
|
||||||
|
|
Loading…
Reference in a new issue