summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testsuite.cpp7
-rw-r--r--src/wildcard.cpp6
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 != '?'))