Commit 25f365f6 authored by Alexander Nozdrin's avatar Alexander Nozdrin

Backporting patch for Bug#47756

from mysql-next-mr-bugfixing into mysql-trunk-bugfixing.

NOTE: the "utf8_phone_ci" collation does not exist in mysql-trunk yet,
so another collation with 2-byte collation ID is used: "utf8_test_ci".

This patch will be null-merged to mysql-next-mr-bugfixing.

Original revision:
------------------------------------------------------------
revision-id: bar@mysql.com-20091207121153-hs3bqbmr0719ws21
committer: Alexander Barkov <bar@mysql.com>
branch nick: mysql-next-mr.b47756
timestamp: Mon 2009-12-07 16:11:53 +0400
message:
  Bug#47756 Setting 2byte collation ID with 'set names' crashes the server
  
  The problem is not actually related to 2byte collation IDs.
  The same crash happens if you change the collation ID in
  mysql-test/str_data/Index.xml to a value smaller than 256.
  
  Crash happened in SQL parser, because the "ident_map" and "state_map"
  arrays were not initialized in loadable utf8 collations.
  
  Fix: adding proper initialization of the "ident_map" and "state_map"
  members for loadable utf8 collations.
------------------------------------------------------------
parent b097816d
...@@ -125,3 +125,11 @@ CREATE TABLE t1 (s1 char(10) character set utf8 collate utf8_maxuserid_ci); ...@@ -125,3 +125,11 @@ CREATE TABLE t1 (s1 char(10) character set utf8 collate utf8_maxuserid_ci);
INSERT INTO t1 VALUES ('a'),('b'); INSERT INTO t1 VALUES ('a'),('b');
SELECT * FROM t1 WHERE s1='a' ORDER BY BINARY s1; SELECT * FROM t1 WHERE s1='a' ORDER BY BINARY s1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#47756 Setting 2byte collation ID with 'set names' crashes the server
#
SET NAMES utf8 COLLATE utf8_test_ci;
SHOW COLLATION LIKE 'utf8_test_ci';
SET NAMES utf8;
...@@ -255,6 +255,9 @@ static int add_collation(CHARSET_INFO *cs) ...@@ -255,6 +255,9 @@ static int add_collation(CHARSET_INFO *cs)
{ {
#if defined (HAVE_CHARSET_utf8) && defined(HAVE_UCA_COLLATIONS) #if defined (HAVE_CHARSET_utf8) && defined(HAVE_UCA_COLLATIONS)
copy_uca_collation(newcs, &my_charset_utf8_unicode_ci); copy_uca_collation(newcs, &my_charset_utf8_unicode_ci);
newcs->ctype= my_charset_utf8_unicode_ci.ctype;
if (init_state_maps(newcs))
return MY_XML_ERROR;
#endif #endif
} }
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment