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.
parent 5e442de3
...@@ -42,3 +42,11 @@ id str ...@@ -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'); ...@@ -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)), ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment