From 4754d3371f209ce31ca417a8c557e29805d3cc49 Mon Sep 17 00:00:00 2001 From: brain Date: Sat, 9 Apr 2005 13:33:57 +0000 Subject: Fixed matching git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1022 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_filter.cpp | 10 ++++------ src/wildcard.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp index 569ed0637..054d77963 100644 --- a/src/modules/m_filter.cpp +++ b/src/modules/m_filter.cpp @@ -26,8 +26,6 @@ /* $ModDesc: An enhanced version of the unreal m_filter.so used by chatspike.net */ - - class ModuleFilter : public Module { Server *Srv; @@ -65,11 +63,11 @@ class ModuleFilter : public Module virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { - std::string text2 = text + " "; + std::string text2 = text+" "; for (int index = 0; index < MyConf->Enumerate("keyword"); index++) { std::string pattern = MyConf->ReadValue("keyword","pattern",index); - if (Srv->MatchText(text2,pattern)) + if ((Srv->MatchText(text2,pattern)) || (Srv->MatchText(text,pattern))) { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); @@ -114,11 +112,11 @@ class ModuleFilter : public Module virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { - std::string text2 = text + " "; + std::string text2 = text+" "; for (int index = 0; index < MyConf->Enumerate("keyword"); index++) { std::string pattern = MyConf->ReadValue("keyword","pattern",index); - if (Srv->MatchText(text2,pattern)) + if ((Srv->MatchText(text2,pattern)) || (Srv->MatchText(text,pattern))) { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); diff --git a/src/wildcard.cpp b/src/wildcard.cpp index 8b4190539..47fbaf002 100644 --- a/src/wildcard.cpp +++ b/src/wildcard.cpp @@ -101,6 +101,17 @@ bool match(const char* literal, const char* mask) strlcpy(M,mask,10240); strlower(L); strlower(M); + // short circuit literals + log(DEBUG,"Match '%s' to '%s'",L,M); + if ((!strchr(M,'*')) && (!strchr(M,'?'))) + { + log(DEBUG,"Short circuiting literal"); + if (!strcasecmp(L,M)) + { + log(DEBUG,"Literal match"); + return true; + } + } match2(L,M); return (MWC == 2); } -- cgit v1.2.3