diff options
author | Alexander Barkov <bar@mariadb.com> | 2022-05-12 10:55:18 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2022-05-12 11:11:43 +0400 |
commit | b9adaeb491a36170a140799bce0de911d654c2d6 (patch) | |
tree | a0d8b595d44fa598788ff8cf41fa701a837e72d2 | |
parent | 404984980feeb4d9d4906cbd166f38d163b096d2 (diff) | |
download | mariadb-git-b9adaeb491a36170a140799bce0de911d654c2d6.tar.gz |
MDEV-28481 SIGSEGV in Lex_charset_collation_st::find_bin_collation
-rw-r--r-- | mysql-test/main/ctype_filename.result | 19 | ||||
-rw-r--r-- | mysql-test/main/ctype_filename.test | 24 | ||||
-rw-r--r-- | sql/lex_charset.cc | 3 |
3 files changed, 45 insertions, 1 deletions
diff --git a/mysql-test/main/ctype_filename.result b/mysql-test/main/ctype_filename.result index 739fa979f28..a223bf084e9 100644 --- a/mysql-test/main/ctype_filename.result +++ b/mysql-test/main/ctype_filename.result @@ -133,3 +133,22 @@ a c DROP TABLE t1; SET NAMES utf8; # End of 10.5 tests +# +# Start of 10.9 tests +# +# +# MDEV-28481 SIGSEGV in Lex_charset_collation_st::find_bin_collation +# +SET SESSION collation_server=filename; +CREATE DATABASE db1; +USE db1; +CREATE TABLE t (c CHAR BINARY); +ERROR HY000: Unknown collation: 'filename_bin' +DROP DATABASE db1; +USE test; +SET NAMES latin1; +CREATE TABLE t1 (c CHAR BINARY) CHARACTER SET filename; +ERROR HY000: Unknown collation: 'filename_bin' +# +# End of 10.9 tests +# diff --git a/mysql-test/main/ctype_filename.test b/mysql-test/main/ctype_filename.test index ba42d1a2807..100e2b3ae43 100644 --- a/mysql-test/main/ctype_filename.test +++ b/mysql-test/main/ctype_filename.test @@ -139,3 +139,27 @@ SET NAMES utf8; --enable_ps_protocol --echo # End of 10.5 tests + +--echo # +--echo # Start of 10.9 tests +--echo # + +--echo # +--echo # MDEV-28481 SIGSEGV in Lex_charset_collation_st::find_bin_collation +--echo # + +SET SESSION collation_server=filename; +CREATE DATABASE db1; +USE db1; +--error ER_UNKNOWN_COLLATION +CREATE TABLE t (c CHAR BINARY); +DROP DATABASE db1; +USE test; +SET NAMES latin1; + +--error ER_UNKNOWN_COLLATION +CREATE TABLE t1 (c CHAR BINARY) CHARACTER SET filename; + +--echo # +--echo # End of 10.9 tests +--echo # diff --git a/sql/lex_charset.cc b/sql/lex_charset.cc index c6c9e402731..7570abbdfb9 100644 --- a/sql/lex_charset.cc +++ b/sql/lex_charset.cc @@ -41,10 +41,11 @@ CHARSET_INFO *Lex_charset_collation_st::find_bin_collation(CHARSET_INFO *cs) return cs; // CREATE TABLE t1 (a CHAR(10) BINARY) CHARACTER SET utf8mb4; + const LEX_CSTRING &cs_name= cs->cs_name; if (!(cs= get_charset_by_csname(cs->cs_name.str, MY_CS_BINSORT, MYF(0)))) { char tmp[65]; - strxnmov(tmp, sizeof(tmp)-1, cs->cs_name.str, "_bin", NULL); + strxnmov(tmp, sizeof(tmp)-1, cs_name.str, "_bin", NULL); my_error(ER_UNKNOWN_COLLATION, MYF(0), tmp); } return cs; |