Bug#23303391: HANDLE_FATAL_SIGNAL (SIG=11) IN ALLOC_QUERY

USING CHARACTER-SET-SERVER=UTF16

This is a backport of Bug#15985752 to mysql-5.5
This commit is contained in:
Arun Kuruvila 2016-08-29 11:41:50 +05:30
parent 7603ac53c8
commit aeab9d6b41
3 changed files with 35 additions and 6 deletions

View File

@ -3482,9 +3482,24 @@ static int init_common_variables()
/* Set collactions that depends on the default collation */ /* Set collactions that depends on the default collation */
global_system_variables.collation_server= default_charset_info; global_system_variables.collation_server= default_charset_info;
global_system_variables.collation_database= default_charset_info; global_system_variables.collation_database= default_charset_info;
global_system_variables.collation_connection= default_charset_info;
global_system_variables.character_set_results= default_charset_info; if (is_supported_parser_charset(default_charset_info))
global_system_variables.character_set_client= default_charset_info; {
global_system_variables.collation_connection= default_charset_info;
global_system_variables.character_set_results= default_charset_info;
global_system_variables.character_set_client= default_charset_info;
}
else
{
sql_print_information("'%s' can not be used as client character set. "
"'%s' will be used as default client character set.",
default_charset_info->csname,
my_charset_latin1.csname);
global_system_variables.collation_connection= &my_charset_latin1;
global_system_variables.character_set_results= &my_charset_latin1;
global_system_variables.character_set_client= &my_charset_latin1;
}
if (!(character_set_filesystem= if (!(character_set_filesystem=
get_charset_by_csname(character_set_filesystem_name, get_charset_by_csname(character_set_filesystem_name,
MY_CS_PRIMARY, MYF(MY_WME)))) MY_CS_PRIMARY, MYF(MY_WME))))

View File

@ -8789,7 +8789,10 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
{ {
mpvio->client_capabilities= uint4korr(end); mpvio->client_capabilities= uint4korr(end);
mpvio->max_client_packet_length= 0xfffff; mpvio->max_client_packet_length= 0xfffff;
charset_code= default_charset_info->number; charset_code= global_system_variables.character_set_client->number;
sql_print_warning("Client failed to provide its character set. "
"'%s' will be used as client character set.",
global_system_variables.character_set_client->csname);
if (mpvio->charset_adapter->init_client_charset(charset_code)) if (mpvio->charset_adapter->init_client_charset(charset_code))
return packet_error; return packet_error;
goto skip_to_ssl; goto skip_to_ssl;
@ -8826,7 +8829,10 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
Old clients didn't have their own charset. Instead the assumption Old clients didn't have their own charset. Instead the assumption
was that they used what ever the server used. was that they used what ever the server used.
*/ */
charset_code= default_charset_info->number; charset_code= global_system_variables.character_set_client->number;
sql_print_warning("Client failed to provide its character set. "
"'%s' will be used as client character set.",
global_system_variables.character_set_client->csname);
} }
DBUG_EXECUTE_IF("host_error_charset", DBUG_EXECUTE_IF("host_error_charset",
{ {

View File

@ -1,5 +1,5 @@
/* /*
Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -431,6 +431,14 @@ bool thd_init_client_charset(THD *thd, uint cs_number)
global_system_variables.character_set_client->name, global_system_variables.character_set_client->name,
cs->name)) cs->name))
{ {
if (!is_supported_parser_charset(
global_system_variables.character_set_client))
{
/* Disallow non-supported parser character sets: UCS2, UTF16, UTF32 */
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client",
global_system_variables.character_set_client->csname);
return true;
}
thd->variables.character_set_client= thd->variables.character_set_client=
global_system_variables.character_set_client; global_system_variables.character_set_client;
thd->variables.collation_connection= thd->variables.collation_connection=