From: Attila Molnar Date: Sat, 15 Mar 2014 14:42:30 +0000 (+0100) Subject: Fix invalid iterator use when removing modes in ModuleManager::DoSafeUnload() X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=6fbfdcc3f3d20ca978246cd2c051c7f05601d055;p=user%2Fhenk%2Fcode%2Finspircd.git Fix invalid iterator use when removing modes in ModuleManager::DoSafeUnload() --- diff --git a/src/modules.cpp b/src/modules.cpp index b6d18b8fd..a4b5ae4bc 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -413,17 +413,19 @@ void ModuleManager::DoSafeUnload(Module* mod) } const ModeParser::ModeHandlerMap& usermodes = ServerInstance->Modes->GetModes(MODETYPE_USER); - for (ModeParser::ModeHandlerMap::const_iterator i = usermodes.begin(); i != usermodes.end(); ++i) + for (ModeParser::ModeHandlerMap::const_iterator i = usermodes.begin(); i != usermodes.end(); ) { ModeHandler* mh = i->second; + ++i; if (mh->creator == mod) this->DelService(*mh); } const ModeParser::ModeHandlerMap& chanmodes = ServerInstance->Modes->GetModes(MODETYPE_CHANNEL); - for (ModeParser::ModeHandlerMap::const_iterator i = chanmodes.begin(); i != chanmodes.end(); ++i) + for (ModeParser::ModeHandlerMap::const_iterator i = chanmodes.begin(); i != chanmodes.end(); ) { ModeHandler* mh = i->second; + ++i; if (mh->creator == mod) this->DelService(*mh); }