mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
BUG#16222245 - CRASH WITH EXPLAIN FOR A QUERY WITH LOOSE SCAN FOR
GROUP BY, MYISAM Problem:- In a query, where we are using loose index scan optimization and we have MIN() causes segmentation fault(where table row length is less then key_length). Analysis: While using loose index scan for MIN(), we call key_copy(), to copy the key data from record. This function is using temporary record buffer to store key data from the record buffer.But in case where the key length is greater then the buffer length, this will cause a segmentation fault. Solution: Give a proper buffer to store a key record.
This commit is contained in:
parent
fd5b7b1453
commit
ed694b0c09
1 changed files with 5 additions and 3 deletions
|
@ -10856,9 +10856,11 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min()
|
|||
*/
|
||||
if (min_max_arg_part && min_max_arg_part->field->is_null())
|
||||
{
|
||||
uchar key_buf[MAX_KEY_LENGTH];
|
||||
|
||||
/* Find the first subsequent record without NULL in the MIN/MAX field. */
|
||||
key_copy(tmp_record, record, index_info, 0);
|
||||
result= file->index_read_map(record, tmp_record,
|
||||
key_copy(key_buf, record, index_info, 0);
|
||||
result= file->index_read_map(record, key_buf,
|
||||
make_keypart_map(real_key_parts),
|
||||
HA_READ_AFTER_KEY);
|
||||
/*
|
||||
|
@ -10874,7 +10876,7 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min()
|
|||
if (!result)
|
||||
{
|
||||
if (key_cmp(index_info->key_part, group_prefix, real_prefix_len))
|
||||
key_restore(record, tmp_record, index_info, 0);
|
||||
key_restore(record, key_buf, index_info, 0);
|
||||
}
|
||||
else if (result == HA_ERR_KEY_NOT_FOUND || result == HA_ERR_END_OF_FILE)
|
||||
result= 0; /* There is a result in any case. */
|
||||
|
|
Loading…
Reference in a new issue