summaryrefslogtreecommitdiff
path: root/storage/myisam
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2021-10-08 20:44:38 +0400
committerAlexander Barkov <bar@mariadb.com>2021-10-11 17:43:23 +0400
commiteadd87880887e6ca73e6f292c9d856df7e56c3c0 (patch)
treed27bb701a9015bba0494e1ff042ead5258bae2a9 /storage/myisam
parent9300b6657752e566a3c72da7ca6eaa8ee052e4e1 (diff)
downloadmariadb-git-eadd87880887e6ca73e6f292c9d856df7e56c3c0.tar.gz
MDEV-23269 SIGSEGV in ft_boolean_check_syntax_string on setting ft_boolean_syntaxbb-10.2-bar-MDEV-23269
The crash happened because my_isalnum() does not support character sets with mbminlen>1. The value of "ft_boolean_syntax" is converted to utf8 in do_string_check(). So calling my_isalnum() is combination with "default_charset_info" was wrong. Adding new parameters (size_t length, CHARSET_INFO *cs) to ft_boolean_check_syntax_string() and passing self->charset(thd) as the character set.
Diffstat (limited to 'storage/myisam')
-rw-r--r--storage/myisam/ft_parser.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c
index f6930e91e6e..b2170a93cde 100644
--- a/storage/myisam/ft_parser.c
+++ b/storage/myisam/ft_parser.c
@@ -78,18 +78,25 @@ FT_WORD * ft_linearize(TREE *wtree, MEM_ROOT *mem_root)
DBUG_RETURN(wlist);
}
-my_bool ft_boolean_check_syntax_string(const uchar *str)
+my_bool ft_boolean_check_syntax_string(const uchar *str, size_t length,
+ CHARSET_INFO *cs)
{
uint i, j;
+ if (cs->mbminlen != 1)
+ {
+ DBUG_ASSERT(0);
+ return 1;
+ }
+
if (!str ||
- (strlen((char*) str)+1 != sizeof(DEFAULT_FTB_SYNTAX)) ||
+ (length + 1 != sizeof(DEFAULT_FTB_SYNTAX)) ||
(str[0] != ' ' && str[1] != ' '))
return 1;
for (i=0; i<sizeof(DEFAULT_FTB_SYNTAX); i++)
{
/* limiting to 7-bit ascii only */
- if ((unsigned char)(str[i]) > 127 || my_isalnum(default_charset_info, str[i]))
+ if ((unsigned char)(str[i]) > 127 || my_isalnum(cs, str[i]))
return 1;
for (j=0; j<i; j++)
if (str[i] == str[j] && (i != 11 || j != 10))