core: fix function string_match with joker in the string if multiple words matched in input string

Before fix:

  string_match("script.color.text_description", "*script*color*", 0) => 0

After fix:

  string_match("script.color.text_description", "*script*color*", 0) => 1
This commit is contained in:
Sébastien Helleu 2021-06-22 21:54:16 +02:00
parent 3d3cdf3884
commit 60b9e36ae2
3 changed files with 29 additions and 1 deletions

View File

@ -30,6 +30,7 @@ New features::
Bug fixes::
* api: fix function string_match with joker in the string if multiple words matched in input string
* irc: set notify level to "private" for received WALLOPS
Documentation::

View File

@ -654,6 +654,13 @@ string_match (const char *string, const char *mask, int case_sensitive)
free (word);
return 0;
}
if ((!pos_word[length_word] && !pos_end[0])
|| string_match (pos_word + length_word, pos_end,
case_sensitive))
{
free (word);
return 1;
}
while (1)
{
pos_word2 = (case_sensitive) ?
@ -662,8 +669,16 @@ string_match (const char *string, const char *mask, int case_sensitive)
if (!pos_word2)
break;
pos_word = pos_word2;
if ((!pos_word[length_word] && !pos_end[0])
|| string_match (pos_word + length_word, pos_end,
case_sensitive))
{
free (word);
return 1;
}
}
ptr_string = pos_word + length_word;
free (word);
return 0;
}
else
{

View File

@ -571,6 +571,18 @@ TEST(CoreString, Match)
LONGS_EQUAL(1, string_match ("aabaa", "aa*", 1));
LONGS_EQUAL(1, string_match ("aabaabaabaa", "aa*", 0));
LONGS_EQUAL(1, string_match ("aabaabaabaa", "aa*", 1));
LONGS_EQUAL(1, string_match ("script.color.description", "*script.color*", 0));
LONGS_EQUAL(1, string_match ("script.color.description", "*script.color*", 1));
LONGS_EQUAL(1, string_match ("script.color.description", "*script.COLOR*", 0));
LONGS_EQUAL(0, string_match ("script.color.description", "*script.COLOR*", 1));
LONGS_EQUAL(1, string_match ("script.color.description", "*script*color*", 0));
LONGS_EQUAL(1, string_match ("script.color.description", "*script*color*", 1));
LONGS_EQUAL(1, string_match ("script.color.description", "*script*COLOR*", 0));
LONGS_EQUAL(0, string_match ("script.color.description", "*script*COLOR*", 1));
LONGS_EQUAL(1, string_match ("script.script.script", "scr*scr*scr*", 0));
LONGS_EQUAL(1, string_match ("script.script.script", "SCR*SCR*SCR*", 0));
LONGS_EQUAL(0, string_match ("script.script.script", "SCR*SCR*SCR*", 1));
LONGS_EQUAL(0, string_match ("script.script.script", "scr*scr*scr*scr*", 0));
}
/*