Bug#19741 segfault with cp1250 charset + like + primary key + 64bit os
LIKE craashed with a pattern having letters in the range 128..255 (e.g. A WITH ACUTE or C WITH CARON) because of wrong cast from signed char to unsigned int.
This commit is contained in:
parent
5e442de398
commit
d19cd9382e
@ -42,3 +42,11 @@ id str
|
|||||||
6 aaaaaa
|
6 aaaaaa
|
||||||
7 aaaaaaa
|
7 aaaaaaa
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names cp1250;
|
||||||
|
create table t1 (a varchar(15) collate cp1250_czech_cs NOT NULL, primary key(a));
|
||||||
|
insert into t1 values("abcdefghá");
|
||||||
|
insert into t1 values("ááèè");
|
||||||
|
select a from t1 where a like "abcdefghá";
|
||||||
|
a
|
||||||
|
abcdefghá
|
||||||
|
drop table t1;
|
||||||
|
@ -44,4 +44,14 @@ INSERT INTO t1 VALUES (NULL, 'aaaaaaa');
|
|||||||
select * from t1 where str like 'aa%';
|
select * from t1 where str like 'aa%';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#19741 segfault with cp1250 charset + like + primary key + 64bit os
|
||||||
|
#
|
||||||
|
set names cp1250;
|
||||||
|
create table t1 (a varchar(15) collate cp1250_czech_cs NOT NULL, primary key(a));
|
||||||
|
insert into t1 values("abcdefghá");
|
||||||
|
insert into t1 values("ááèè");
|
||||||
|
select a from t1 where a like "abcdefghá";
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -634,11 +634,11 @@ my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
ptr++; /* Skip escape */
|
ptr++; /* Skip escape */
|
||||||
else if (*ptr == w_one || *ptr == w_many) /* '_' or '%' in SQL */
|
else if (*ptr == w_one || *ptr == w_many) /* '_' or '%' in SQL */
|
||||||
break;
|
break;
|
||||||
*min_str = like_range_prefix_min_win1250ch[(uint)(*ptr)];
|
*min_str = like_range_prefix_min_win1250ch[(uint) (uchar) (*ptr)];
|
||||||
if (*min_str != min_sort_char)
|
if (*min_str != min_sort_char)
|
||||||
only_min_found= 0;
|
only_min_found= 0;
|
||||||
min_str++;
|
min_str++;
|
||||||
*max_str++ = like_range_prefix_max_win1250ch[(uint)(*ptr)];
|
*max_str++ = like_range_prefix_max_win1250ch[(uint) (uchar) (*ptr)];
|
||||||
}
|
}
|
||||||
|
|
||||||
*min_length = (uint) (min_str - min_org);
|
*min_length = (uint) (min_str - min_org);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user