mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-23330 Server crash or ASAN negative-size-param in my_strnncollsp_binary / SORT_FIELD_ATTR::compare_packed_varstrings
and
MDEV-23414 Assertion `res->charset() == item->collation.collation' failed in Type_handler_string_result::make_packed_sort_key_part
pack_sort_string() *must* take a collation from the Item, not from the
String value. Because when casting a string to _binary the original
String is not copied for performance reasons, it's reused but its
collation does not match Item's collation anymore.
Note, that String's collation cannot be simply changed to _binary,
because for an Item_string literal the original String must stay
unchanged for the duration of the query.
this partially reverts 61c15ebe32
This commit is contained in:
@@ -35,3 +35,41 @@ DES_DECRYPT(DES_ENCRYPT('1234')) DES_DECRYPT(DES_ENCRYPT('12345')) DES_DECRYPT(D
|
||||
1234 12345 123456 1234567
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# MDEV-23330 Server crash or ASAN negative-size-param in
|
||||
# my_strnncollsp_binary / SORT_FIELD_ATTR::compare_packed_varstrings
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(240), b BIT(48));
|
||||
INSERT INTO t1 VALUES ('a',b'0001'),('b',b'0010'),('c',b'0011'),('d',b'0100'),('e',b'0001'),('f',b'0101'),('g',b'0110'),('h',b'0111'),('i',b'1000'),('j',b'1001');
|
||||
SELECT DES_DECRYPT(a, 'x'), HEX(BINARY b) FROM t1 GROUP BY 1, 2 WITH ROLLUP;
|
||||
DES_DECRYPT(a, 'x') HEX(BINARY b)
|
||||
a 000000000001
|
||||
a NULL
|
||||
b 000000000002
|
||||
b NULL
|
||||
c 000000000003
|
||||
c NULL
|
||||
d 000000000004
|
||||
d NULL
|
||||
e 000000000001
|
||||
e NULL
|
||||
f 000000000005
|
||||
f NULL
|
||||
g 000000000006
|
||||
g NULL
|
||||
h 000000000007
|
||||
h NULL
|
||||
i 000000000008
|
||||
i NULL
|
||||
j 000000000009
|
||||
j NULL
|
||||
NULL NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT t1 VALUES (1),(2);
|
||||
SELECT CHAR_LENGTH(a), DES_DECRYPT(a) FROM (SELECT _utf8 0xC2A2 AS a FROM t1) AS t2;
|
||||
CHAR_LENGTH(a) DES_DECRYPT(a)
|
||||
1 <09>
|
||||
1 <09>
|
||||
DROP TABLE t1;
|
||||
End of 10.5 tests
|
||||
|
Reference in New Issue
Block a user