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:
@@ -86,7 +86,7 @@ static uchar* extra2_write_str(uchar *pos, const LEX_CSTRING &str)
|
||||
return pos + str.length;
|
||||
}
|
||||
|
||||
static uchar* extra2_write_str(uchar *pos, Binary_string *str)
|
||||
static uchar* extra2_write_str(uchar *pos, const Binary_string *str)
|
||||
{
|
||||
pos= extra2_write_len(pos, str->length());
|
||||
memcpy(pos, str->ptr(), str->length());
|
||||
@@ -185,7 +185,7 @@ class Field_data_type_info_image: public BinaryStringBuffer<512>
|
||||
{
|
||||
return net_store_length(pos, length);
|
||||
}
|
||||
static uchar *store_string(uchar *pos, Binary_string *str)
|
||||
static uchar *store_string(uchar *pos, const Binary_string *str)
|
||||
{
|
||||
pos= store_length(pos, str->length());
|
||||
memcpy(pos, str->ptr(), str->length());
|
||||
|
Reference in New Issue
Block a user