mirror of
https://github.com/MariaDB/server.git
synced 2025-03-26 17:08:41 +01: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 (_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;
|
||||
|
|
Loading…
Add table
Reference in a new issue