Commit e0b62943 authored by Alexander Barkov's avatar Alexander Barkov

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.
parent 0b9cee2c
#
# 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
#
--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 (_ucs2 0x2020);
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 (_ucs2 0x2020);
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);
context->table_list= NULL;
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;
thd->where= save_where;
context->table_list= save_list;
......
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