]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/base.cpp
Fix null dereference caused by tracking dummy
[user/henk/code/inspircd.git] / src / base.cpp
index 15a642eb403aa2145409b63b4262ea9b86e20e3d..59196fec1d6242fb1ca1a3f6ffad4cacd915517f 100644 (file)
@@ -136,17 +136,32 @@ void Extensible::doUnhookExtensions(const std::vector<ExtensionItem*>& toRemove)
        }
 }
 
+static struct DummyExtensionItem : LocalExtItem
+{
+       DummyExtensionItem() : LocalExtItem("", NULL) {}
+       void free(void*) {}
+} dummy;
+
+Extensible::Extensible()
+{
+       extensions[&dummy] = NULL;
+}
+
 CullResult Extensible::cull()
 {
        for(ExtensibleStore::iterator i = extensions.begin(); i != extensions.end(); ++i)
        {
-               i->first->free(i->second);      
+               i->first->free(i->second);
        }
+       extensions.clear();
        return classbase::cull();
 }
 
 Extensible::~Extensible()
 {
+       if (!extensions.empty() && ServerInstance && ServerInstance->Logs)
+               ServerInstance->Logs->Log("CULLLIST", DEBUG,
+                       "Extensible destructor called without cull @%p", (void*)this);
 }
 
 LocalExtItem::LocalExtItem(const std::string& Key, Module* mod) : ExtensionItem(Key, mod)