]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Fix null dereference caused by tracking dummy
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 18 Oct 2009 03:09:39 +0000 (03:09 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 18 Oct 2009 03:09:39 +0000 (03:09 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11902 e03df62e-2008-0410-955e-edbf42e46eb7

src/base.cpp
src/modules/m_check.cpp
src/modules/m_httpd_stats.cpp

index 97722744054f05272da4765e4fe8e84c876ac43c..59196fec1d6242fb1ca1a3f6ffad4cacd915517f 100644 (file)
@@ -136,17 +136,22 @@ void Extensible::doUnhookExtensions(const std::vector<ExtensionItem*>& toRemove)
        }
 }
 
+static struct DummyExtensionItem : LocalExtItem
+{
+       DummyExtensionItem() : LocalExtItem("", NULL) {}
+       void free(void*) {}
+} dummy;
+
 Extensible::Extensible()
 {
-       extensions[NULL] = NULL;
+       extensions[&dummy] = NULL;
 }
 
 CullResult Extensible::cull()
 {
        for(ExtensibleStore::iterator i = extensions.begin(); i != extensions.end(); ++i)
        {
-               if (i->first)
-                       i->first->free(i->second);
+               i->first->free(i->second);
        }
        extensions.clear();
        return classbase::cull();
index 729667fa8ccd668a40881a7ada062d8f5cd1ccbd..df42d4608fd3cf690ab27e4c4bb38e03e8df03a1 100644 (file)
@@ -40,10 +40,10 @@ class CommandCheck : public Command
                {
                        ExtensionItem* item = i->first;
                        std::string value = item->serialize(FORMAT_USER, ext, i->second);
-                       if (value.empty())
-                               dumpkeys << " " << i->first;
-                       else
+                       if (!value.empty())
                                ServerInstance->DumpText(user, checkstr + " meta:" + item->key + " " + value);
+                       else if (!item->key.empty())
+                               dumpkeys << " " << item->key;
                }
                if (!dumpkeys.str().empty())
                        ServerInstance->DumpText(user,checkstr + " metadata", dumpkeys);
index a451f6af99d039051888fbab74c61c94f1258526..5288130ce359c246ca3557e5956acc22740a1a40 100644 (file)
@@ -73,10 +73,10 @@ class ModuleHttpStats : public Module
                {
                        ExtensionItem* item = i->first;
                        std::string value = item->serialize(FORMAT_USER, ext, i->second);
-                       if (value.empty())
-                               data << "<meta name=\"" << item->key << "\"/>";
-                       else
+                       if (!value.empty())
                                data << "<meta name=\"" << item->key << "\">" << Sanitize(value) << "</meta>";
+                       else if (!item->key.empty())
+                               data << "<meta name=\"" << item->key << "\"/>";
                }
                data << "</metadata>";
        }
@@ -144,7 +144,9 @@ class ModuleHttpStats : public Module
                                                Membership* memb = x->second;
                                                data << "<channelmember><uid>" << memb->user->uuid << "</uid><privs>"
                                                        << Sanitize(c->GetAllPrefixChars(x->first)) << "</privs><modes>"
-                                                       << memb->modes << "</modes></channelmember>";
+                                                       << memb->modes << "</modes>";
+                                               DumpMeta(data, memb);
+                                               data << "</channelmember>";
                                        }
 
                                        DumpMeta(data, c);