Bugs: #7111: server crashes when regexp is used
This commit is contained in:
parent
611abb882b
commit
c735aaebfc
@ -2375,3 +2375,14 @@ DROP DATABASE d1;
|
|||||||
USE test;
|
USE test;
|
||||||
SET character_set_server= @safe_character_set_server;
|
SET character_set_server= @safe_character_set_server;
|
||||||
SET collation_server= @safe_collation_server;
|
SET collation_server= @safe_collation_server;
|
||||||
|
create table t1 (a varchar(1)) character set utf8 collate utf8_estonian_ci;
|
||||||
|
insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c');
|
||||||
|
select a, a regexp '[a]' from t1 order by binary a;
|
||||||
|
a a regexp '[a]'
|
||||||
|
A 1
|
||||||
|
B 0
|
||||||
|
C 0
|
||||||
|
a 1
|
||||||
|
b 0
|
||||||
|
c 0
|
||||||
|
drop table t1;
|
||||||
|
@ -444,3 +444,11 @@ DROP TABLE t1;
|
|||||||
SET @test_character_set= 'utf8';
|
SET @test_character_set= 'utf8';
|
||||||
SET @test_collation= 'utf8_swedish_ci';
|
SET @test_collation= 'utf8_swedish_ci';
|
||||||
-- source include/ctype_common.inc
|
-- source include/ctype_common.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug 7111 server crashes when regexp is used
|
||||||
|
#
|
||||||
|
create table t1 (a varchar(1)) character set utf8 collate utf8_estonian_ci;
|
||||||
|
insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c');
|
||||||
|
select a, a regexp '[a]' from t1 order by binary a;
|
||||||
|
drop table t1;
|
||||||
|
@ -860,11 +860,28 @@ othercase(charset,ch)
|
|||||||
CHARSET_INFO *charset;
|
CHARSET_INFO *charset;
|
||||||
int ch;
|
int ch;
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
In MySQL some multi-byte character sets
|
||||||
|
have 'ctype' array but don't have 'to_lower'
|
||||||
|
and 'to_upper' arrays. In this case we handle
|
||||||
|
only basic latin letters a..z and A..Z.
|
||||||
|
|
||||||
|
If 'to_lower' and 'to_upper' arrays are empty in a character set,
|
||||||
|
then my_isalpha(cs, ch) should never return TRUE for characters
|
||||||
|
other than basic latin letters. Otherwise it should be
|
||||||
|
considered as a mistake in character set definition.
|
||||||
|
*/
|
||||||
assert(my_isalpha(charset,ch));
|
assert(my_isalpha(charset,ch));
|
||||||
if (my_isupper(charset,ch))
|
if (my_isupper(charset,ch))
|
||||||
return(my_tolower(charset,ch));
|
{
|
||||||
|
return(charset->to_lower ? my_tolower(charset,ch) :
|
||||||
|
ch - 'A' + 'a');
|
||||||
|
}
|
||||||
else if (my_islower(charset,ch))
|
else if (my_islower(charset,ch))
|
||||||
return(my_toupper(charset,ch));
|
{
|
||||||
|
return(charset->to_upper ? my_toupper(charset,ch) :
|
||||||
|
ch - 'a' + 'A');
|
||||||
|
}
|
||||||
else /* peculiar, but could happen */
|
else /* peculiar, but could happen */
|
||||||
return(ch);
|
return(ch);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user