diff options
author | Patrick Monnerat <patrick@monnerat.net> | 2018-01-29 13:01:43 +0100 |
---|---|---|
committer | Patrick Monnerat <patrick@monnerat.net> | 2018-01-31 01:17:35 +0100 |
commit | 19abad095caafb2279f8aeb5d39cd038dcece938 (patch) | |
tree | c4ebd985b289d26379cf0a58c129a65a44d2d156 | |
parent | 2b50e56343e1ac805f10ca17935716b5c70c44b1 (diff) |
fnmatch: do not match the empty string with a character set
-rw-r--r-- | lib/curl_fnmatch.c | 6 | ||||
-rw-r--r-- | tests/unit/unit1307.c | 4 |
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 }, |