Commit 00792d37 authored by Alexander Barkov's avatar Alexander Barkov

Bug#43827 Server closes connections and restarts

Problem:
  Crash happened with a user-defined utf8 collation,
  on attempt to insert a value longer than the column
  to store.
Reason:
  The "ctype" member was not initialized (NULL) when
  allocating a user-defined utf8 collation, so an attempt
  to call my_ctype(cs, *str) to check if we loose any important
  data when truncating the value made the server crash.
Fix:
  Initializing tge "ctype" member to a proper value.


mysql-test/r/ctype_ldml.result
  Adding tests

mysql-test/t/ctype_ldml.test
  Adding tests

strings/ctype-uca.c
  Adding initialization of "ctype" member.

modified:
  mysql-test/r/ctype_ldml.result
  mysql-test/t/ctype_ldml.test
  strings/ctype-uca.c
parent 9379a4e0
...@@ -40,6 +40,14 @@ abcd abcd ...@@ -40,6 +40,14 @@ abcd abcd
efgh efgh efgh efgh
ijkl ijkl ijkl ijkl
DROP TABLE t1; DROP TABLE t1;
#
# Bug#43827 Server closes connections and restarts
#
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_test_ci);
INSERT INTO t1 SELECT REPEAT('a',11);
Warnings:
Warning 1265 Data truncated for column 'c1' at row 1
DROP TABLE t1;
show collation like 'ucs2_vn_ci'; show collation like 'ucs2_vn_ci';
Collation Charset Id Default Compiled Sortlen Collation Charset Id Default Compiled Sortlen
ucs2_vn_ci ucs2 242 8 ucs2_vn_ci ucs2 242 8
......
...@@ -37,6 +37,15 @@ UPDATE t1 SET col2=col1; ...@@ -37,6 +37,15 @@ UPDATE t1 SET col2=col1;
SELECT * FROM t1 WHERE col1=col2 ORDER BY col1; SELECT * FROM t1 WHERE col1=col2 ORDER BY col1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug#43827 Server closes connections and restarts
--echo #
# Crash happened with a user-defined utf8 collation,
# on attempt to insert a string longer than the column can store.
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_test_ci);
INSERT INTO t1 SELECT REPEAT('a',11);
DROP TABLE t1;
# #
# Vietnamese experimental collation # Vietnamese experimental collation
# #
......
...@@ -7992,6 +7992,7 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(size_t)) ...@@ -7992,6 +7992,7 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(size_t))
static my_bool my_coll_init_uca(CHARSET_INFO *cs, void *(*alloc)(size_t)) static my_bool my_coll_init_uca(CHARSET_INFO *cs, void *(*alloc)(size_t))
{ {
cs->pad_char= ' '; cs->pad_char= ' ';
cs->ctype= my_charset_utf8_unicode_ci.ctype;
return create_tailoring(cs, alloc); return create_tailoring(cs, alloc);
} }
......
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