]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Merge branch 'master+gnutls-packet-read'
[user/henk/code/inspircd.git] / src / channels.cpp
index 53a48c46970204d108f2eeba992bd6d429b296f2..e06e4c6fcd3b085107ecad75aab6f9142f313eaf 100644 (file)
@@ -86,14 +86,13 @@ void Channel::CheckDestroy()
        if (res == MOD_RES_DENY)
                return;
 
+       // If the channel isn't in chanlist then it is already in the cull list, don't add it again
        chan_hash::iterator iter = ServerInstance->chanlist.find(this->name);
-       /* kill the record */
-       if (iter != ServerInstance->chanlist.end())
-       {
-               FOREACH_MOD(OnChannelDelete, (this));
-               ServerInstance->chanlist.erase(iter);
-       }
+       if ((iter == ServerInstance->chanlist.end()) || (iter->second != this))
+               return;
 
+       FOREACH_MOD(OnChannelDelete, (this));
+       ServerInstance->chanlist.erase(iter);
        ClearInvites();
        ServerInstance->GlobalCulls.AddItem(this);
 }
@@ -396,10 +395,10 @@ bool Channel::CheckBan(User* user, const std::string& mask)
                return false;
 
        const std::string nickIdent = user->nick + "!" + user->ident;
-       std::string prefix = mask.substr(0, at);
+       std::string prefix(mask, 0, at);
        if (InspIRCd::Match(nickIdent, prefix, NULL))
        {
-               std::string suffix = mask.substr(at + 1);
+               std::string suffix(mask, at + 1);
                if (InspIRCd::Match(user->host, suffix, NULL) ||
                        InspIRCd::Match(user->dhost, suffix, NULL) ||
                        InspIRCd::MatchCIDR(user->GetIPString(), suffix, NULL))
@@ -599,7 +598,7 @@ void Channel::UserList(User* user, bool has_user)
        list.append(this->name).append(" :");
        std::string::size_type pos = list.size();
 
-       const size_t maxlen = ServerInstance->Config->Limits.MaxLine - 10 - ServerInstance->Config->ServerName.size();
+       const size_t maxlen = ServerInstance->Config->Limits.MaxLine - 10 - ServerInstance->Config->ServerName.size() - user->nick.size();
        std::string prefixlist;
        std::string nick;
        for (MemberMap::iterator i = userlist.begin(); i != userlist.end(); ++i)