]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Whoops, properly handle rehash now that new filters might be added by /FILTER
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 10 Nov 2006 18:42:01 +0000 (18:42 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 10 Nov 2006 18:42:01 +0000 (18:42 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5672 e03df62e-2008-0410-955e-edbf42e46eb7

src/modules/extra/m_filter_pcre.cpp
src/modules/m_filter.cpp

index dde7575ab60b1391a83d4192855ac3b968495fb5..a7829871f18569416a587c36cb733dce6de2d1ae 100644 (file)
@@ -81,6 +81,7 @@ class ModuleFilterPCRE : public FilterBase
                {
                        if (i->freeform == freeform)
                        {
+                               pcre_free((*i).regexp);
                                filters.erase(i);
                                return true;
                        }
@@ -125,13 +126,10 @@ class ModuleFilterPCRE : public FilterBase
        {               
                ConfigReader MyConf(ServerInstance);
 
-               for (std::vector<PCREFilter>::iterator i = filters.begin(); i != filters.end(); i++)
-                       pcre_free((*i).regexp);
-
-               filters.clear();
-
                for (int index = 0; index < MyConf.Enumerate("keyword"); index++)
                {
+                       this->DeleteFilter(MyConf.ReadValue("keyword", "pattern", index));
+
                        std::string pattern = MyConf.ReadValue("keyword", "pattern", index);
                        std::string reason = MyConf.ReadValue("keyword", "reason", index);
                        std::string action = MyConf.ReadValue("keyword", "action", index);
index 88665e8b3ac59fe5b412fdde34070f052130c845..b0ace124e6f9a0182cbba164f1b4f34313b1aa1f 100644 (file)
@@ -66,6 +66,7 @@ class ModuleFilter : public FilterBase
        {
                if (filters.find(freeform) != filters.end())
                {
+                       delete (filters.find(freeform))->second;
                        filters.erase(filters.find(freeform));
                        return true;
                }
@@ -99,15 +100,12 @@ class ModuleFilter : public FilterBase
 
        virtual void OnRehash(const std::string &parameter)
        {
-               // this automatically re-reads the configuration file into the class
                ConfigReader* MyConf = new ConfigReader(ServerInstance);
-               for (filter_t::iterator n = filters.begin(); n != filters.end(); n++)
-               {
-                       DELETE(n->second);
-               }
-               filters.clear();
+
                for (int index = 0; index < MyConf->Enumerate("keyword"); index++)
                {
+                       this->DeleteFilter(MyConf->ReadValue("keyword","pattern",index));
+
                        std::string pattern = MyConf->ReadValue("keyword","pattern",index);
                        std::string reason = MyConf->ReadValue("keyword","reason",index);
                        std::string do_action = MyConf->ReadValue("keyword","action",index);