mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bugs: #7111: server crashes when regexp is used
This commit is contained in:
@ -860,11 +860,28 @@ othercase(charset,ch)
|
||||
CHARSET_INFO *charset;
|
||||
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));
|
||||
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))
|
||||
return(my_toupper(charset,ch));
|
||||
{
|
||||
return(charset->to_upper ? my_toupper(charset,ch) :
|
||||
ch - 'a' + 'A');
|
||||
}
|
||||
else /* peculiar, but could happen */
|
||||
return(ch);
|
||||
}
|
||||
|
Reference in New Issue
Block a user