diff options
-rw-r--r-- | src/testsuite.cpp | 7 | ||||
-rw-r--r-- | src/wildcard.cpp | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/testsuite.cpp b/src/testsuite.cpp index a4d8c871c..cff6d9b93 100644 --- a/src/testsuite.cpp +++ b/src/testsuite.cpp @@ -121,6 +121,8 @@ bool TestSuite::DoWildTests() WCTESTNOT("foobar", "*qux"); WCTESTNOT("foobar", "foo*x"); WCTESTNOT("foobar", "baz*"); + WCTESTNOT("foobar", "foo???r"); + WCTESTNOT("foobar", ""); CIDRTEST("brain@1.2.3.4", "*@1.2.0.0/16"); CIDRTEST("brain@1.2.3.4", "*@1.2.3.0/24"); @@ -128,6 +130,11 @@ bool TestSuite::DoWildTests() CIDRTESTNOT("brain@1.2.3.4", "x*@1.2.0.0/16"); CIDRTESTNOT("brain@1.2.3.4", "*@1.3.4.0/24"); + CIDRTESTNOT("brain@1.2.3.4", "*@/24"); + CIDRTESTNOT("brain@1.2.3.4", "@1.2.3.4/9"); + CIDRTESTNOT("brain@1.2.3.4", "@"); + CIDRTESTNOT("brain@1.2.3.4", ""); + return passed; } diff --git a/src/wildcard.cpp b/src/wildcard.cpp index 9846b7d4f..3a91e8350 100644 --- a/src/wildcard.cpp +++ b/src/wildcard.cpp @@ -35,6 +35,9 @@ CoreExport bool csmatch(const std::string &str, const std::string &mask) std::string::const_iterator wild = mask.begin(); std::string::const_iterator string = str.begin(); + if (mask.empty()) + return false; + while ((string != str.end()) && (wild != mask.end()) && (*wild != '*')) { if ((*wild != *string) && (*wild != '?')) @@ -81,6 +84,9 @@ CoreExport bool match(const std::string &str, const std::string &mask) std::string::const_iterator wild = mask.begin(); std::string::const_iterator string = str.begin(); + if (mask.empty()) + return false; + while ((string != str.end()) && (wild != mask.end()) && (*wild != '*')) { if ((lowermap[(unsigned char)*wild] != lowermap[(unsigned char)*string]) && (*wild != '?')) |