aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Monnerat <patrick@monnerat.net>2018-01-29 13:01:43 +0100
committerPatrick Monnerat <patrick@monnerat.net>2018-01-31 01:17:35 +0100
commit19abad095caafb2279f8aeb5d39cd038dcece938 (patch)
treec4ebd985b289d26379cf0a58c129a65a44d2d156
parent2b50e56343e1ac805f10ca17935716b5c70c44b1 (diff)
fnmatch: do not match the empty string with a character set
-rw-r--r--lib/curl_fnmatch.c6
-rw-r--r--tests/unit/unit1307.c4
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/curl_fnmatch.c b/lib/curl_fnmatch.c
index f33bba1f1..5b6d28c06 100644
--- a/lib/curl_fnmatch.c
+++ b/lib/curl_fnmatch.c
@@ -352,6 +352,8 @@ static int loop(const unsigned char *pattern, const unsigned char *string,
unsigned char *pp = p + 1; /* cannot handle with pointer to register */
if(setcharset(&pp, charset)) {
int found = FALSE;
+ if(!*s)
+ return CURL_FNMATCH_NOMATCH;
if(charset[(unsigned int)*s])
found = TRUE;
else if(charset[CURLFNM_ALNUM])
@@ -380,9 +382,7 @@ static int loop(const unsigned char *pattern, const unsigned char *string,
if(found) {
p = pp + 1;
- if(*s)
- /* don't advance if we're matching on an empty string */
- s++;
+ s++;
memset(charset, 0, CURLFNM_CHSET_SIZE);
}
else
diff --git a/tests/unit/unit1307.c b/tests/unit/unit1307.c
index 266eed392..eff5edebc 100644
--- a/tests/unit/unit1307.c
+++ b/tests/unit/unit1307.c
@@ -97,8 +97,8 @@ static const struct testcase tests[] = {
{ "*[^a].t?t", "a.txt", NOMATCH },
{ "*[^a].t?t", "ba.txt", NOMATCH },
{ "*[^a].t?t", "ab.txt", MATCH },
- { "*[^a]", "", MATCH },
- { "[!ÿ]", "", MATCH },
+ { "*[^a]", "", NOMATCH },
+ { "[!ÿ]", "", NOMATCH },
{ "[!?*[]", "?", NOMATCH },
{ "[!!]", "!", NOMATCH },
{ "[!!]", "x", MATCH },