X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fwildcard.cpp;h=2df7a5bec10e769b3e3445e8ebc18132fbfaee0c;hb=e078fae142238765f279b50c309f22a5a0761ce4;hp=9846b7d4f4213ee603cc6766cbacaad4b6afdf96;hpb=03ef675c0dd4742464d8ad93888e98721a044108;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/wildcard.cpp b/src/wildcard.cpp index 9846b7d4f..2df7a5bec 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 != '?')) @@ -46,17 +49,19 @@ CoreExport bool csmatch(const std::string &str, const std::string &mask) while (string != str.end()) { - if (*wild == '*') + if (wild != mask.end() && *wild == '*') { if (++wild == mask.end()) return 1; mp = wild; cp = string; - cp++; + + if (cp != str.end()) + cp++; } else - if ((*wild == *string) || (*wild == '?')) + if ((string != str.end() && wild != mask.end()) && ((*wild == *string) || (*wild == '?'))) { wild++; string++; @@ -64,7 +69,10 @@ CoreExport bool csmatch(const std::string &str, const std::string &mask) else { wild = mp; - string = cp++; + if (cp == str.end()) + cp = str.end(); + else + string = cp++; } } @@ -81,6 +89,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 != '?')) @@ -92,17 +103,20 @@ CoreExport bool match(const std::string &str, const std::string &mask) while (string != str.end()) { - if (*wild == '*') + if (wild != mask.end() && *wild == '*') { if (++wild == mask.end()) return 1; mp = wild; cp = string; - cp++; + + if (cp != str.end()) + cp++; + } else - if ((lowermap[(unsigned char)*wild] == lowermap[(unsigned char)*string]) || (*wild == '?')) + if ((string != str.end() && wild != mask.end()) && ((lowermap[(unsigned char)*wild] == lowermap[(unsigned char)*string]) || (*wild == '?'))) { wild++; string++; @@ -110,7 +124,10 @@ CoreExport bool match(const std::string &str, const std::string &mask) else { wild = mp; - string = cp++; + if (cp == str.end()) + string = str.end(); + else + string = cp++; } }