mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
MDEV-20855 Crash with PARTITION BY LIST and extended characters
The code in convert_charset_partition_constant() did not take into account that the call for item->safe_charset_converter() can return NULL when conversion is not safe. Note, 10.2 was not affected. The test for NULL presents in 10.2, but it disappeared in 10.3 in a mistake. Restoring the test.
This commit is contained in:
parent
0b9cee2cbf
commit
e0b6294338
5 changed files with 71 additions and 1 deletions
13
mysql-test/main/partition_ucs2.result
Normal file
13
mysql-test/main/partition_ucs2.result
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#
|
||||||
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-20855 Crash with PARTITION BY LIST and extended characters
|
||||||
|
#
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE OR REPLACE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_ucs2 0x0411));
|
||||||
|
ERROR HY000: This partition function is not allowed
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
19
mysql-test/main/partition_ucs2.test
Normal file
19
mysql-test/main/partition_ucs2.test
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
--source include/have_partition.inc
|
||||||
|
--source include/have_ucs2.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-20855 Crash with PARTITION BY LIST and extended characters
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||||
|
CREATE OR REPLACE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN (_ucs2 0x0411));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
@ -51,3 +51,19 @@ t1 CREATE TABLE `t1` (
|
||||||
insert into t1 values ('');
|
insert into t1 values ('');
|
||||||
insert into t1 values (_ucs2 0x2020);
|
insert into t1 values (_ucs2 0x2020);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-20855 Crash with PARTITION BY LIST and extended characters
|
||||||
|
#
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE OR REPLACE TABLE t1 (a CHAR(10)) CHARACTER SET latin1
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('Б'));
|
||||||
|
ERROR HY000: This partition function is not allowed
|
||||||
|
CREATE OR REPLACE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('Б'));
|
||||||
|
ERROR HY000: This partition function is not allowed
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
|
|
||||||
|
|
@ -40,3 +40,25 @@ show create table t1;
|
||||||
insert into t1 values ('');
|
insert into t1 values ('');
|
||||||
insert into t1 values (_ucs2 0x2020);
|
insert into t1 values (_ucs2 0x2020);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-20855 Crash with PARTITION BY LIST and extended characters
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
|
||||||
|
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||||
|
CREATE OR REPLACE TABLE t1 (a CHAR(10)) CHARACTER SET latin1
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('Б'));
|
||||||
|
|
||||||
|
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||||
|
CREATE OR REPLACE TABLE t1 (a TIME)
|
||||||
|
PARTITION BY LIST COLUMNS (a) (PARTITION p0 VALUES IN ('Б'));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ Item* convert_charset_partition_constant(Item *item, CHARSET_INFO *cs)
|
||||||
item= item->safe_charset_converter(thd, cs);
|
item= item->safe_charset_converter(thd, cs);
|
||||||
context->table_list= NULL;
|
context->table_list= NULL;
|
||||||
thd->where= "convert character set partition constant";
|
thd->where= "convert character set partition constant";
|
||||||
if (item->fix_fields_if_needed(thd, (Item**)NULL))
|
if (item && item->fix_fields_if_needed(thd, (Item**)NULL))
|
||||||
item= NULL;
|
item= NULL;
|
||||||
thd->where= save_where;
|
thd->where= save_where;
|
||||||
context->table_list= save_list;
|
context->table_list= save_list;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue