MDEV-24337 Server crash in DTCollation::set_repertoire_from_charset

The loop in Item_func_in::get_func_mm_tree incorrectly used array->count
in the loop. Fixing it to array->used_count.
This commit is contained in:
Alexander Barkov 2024-11-18 12:38:43 +04:00
parent 76fc26d632
commit 70dbd63e02
3 changed files with 16 additions and 1 deletions

View file

@ -5459,4 +5459,11 @@ drop table t1, t2;
SELECT ST_ASTEXT(BOUNDARY(INET6_ATON('255.255.255.255'))) AS c1;
c1
NULL
#
# Server crash in DTCollation::set_repertoire_from_charset
#
CREATE TABLE t (f POINT, KEY(f));
DELETE FROM t WHERE f NOT IN (NULL,'x');
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
DROP TABLE t;
# End of 10.5 tests

View file

@ -3463,5 +3463,13 @@ drop table t1, t2;
SELECT ST_ASTEXT(BOUNDARY(INET6_ATON('255.255.255.255'))) AS c1;
--echo #
--echo # Server crash in DTCollation::set_repertoire_from_charset
--echo #
CREATE TABLE t (f POINT, KEY(f));
--error ER_CANT_CREATE_GEOMETRY_OBJECT
DELETE FROM t WHERE f NOT IN (NULL,'x');
DROP TABLE t;
--echo # End of 10.5 tests

View file

@ -7982,7 +7982,7 @@ SEL_TREE *Item_func_in::get_func_mm_tree(RANGE_OPT_PARAM *param,
if (!tree)
break;
i++;
} while (i < array->count && tree->type == SEL_TREE::IMPOSSIBLE);
} while (i < array->used_count && tree->type == SEL_TREE::IMPOSSIBLE);
if (!tree || tree->type == SEL_TREE::IMPOSSIBLE)
{