X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=229e2b8eaf0696846334da78fadd56141406bbc5;hb=56cae0f3a484cbcb20569b68917f1810a0c2f4a4;hp=c265171b5ce85c6ced4e78d30a440a3ed4f8eb28;hpb=8e662f620239cc42136c7a6526cc94eac3db1f59;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index c265171b5..229e2b8ea 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -231,7 +231,6 @@ Channel* Channel::JoinUser(User *user, const char* cn, bool override, const char if (!user || !cn || user->registered != REG_ALL) return NULL; - char cname[MAXBUF]; std::string privs; Channel *Ptr; @@ -264,7 +263,8 @@ Channel* Channel::JoinUser(User *user, const char* cn, bool override, const char } } - strlcpy(cname, cn, ServerInstance->Config->Limits.ChanMax); + std::string cname; + cname.assign(std::string(cn), 0, ServerInstance->Config->Limits.ChanMax); Ptr = ServerInstance->FindChan(cname); bool created_by_local = false; @@ -287,7 +287,7 @@ Channel* Channel::JoinUser(User *user, const char* cn, bool override, const char if (IS_LOCAL(user) && override == false) { ModResult MOD_RESULT; - FIRST_MOD_RESULT(OnUserPreJoin, MOD_RESULT, (user, NULL, cname, privs, key ? key : "")); + FIRST_MOD_RESULT(OnUserPreJoin, MOD_RESULT, (user, NULL, cname.c_str(), privs, key ? key : "")); if (MOD_RESULT == MOD_RES_DENY) return NULL; } @@ -307,7 +307,7 @@ Channel* Channel::JoinUser(User *user, const char* cn, bool override, const char if (IS_LOCAL(user) && override == false) { ModResult MOD_RESULT; - FIRST_MOD_RESULT(OnUserPreJoin, MOD_RESULT, (user, Ptr, cname, privs, key ? key : "")); + FIRST_MOD_RESULT(OnUserPreJoin, MOD_RESULT, (user, Ptr, cname.c_str(), privs, key ? key : "")); if (MOD_RESULT == MOD_RES_DENY) { return NULL; @@ -449,7 +449,7 @@ bool Channel::CheckBan(User* user, const std::string& mask) return (result == MOD_RES_DENY); // extbans were handled above, if this is one it obviously didn't match - if (mask[1] == ':') + if ((mask.length() <= 2) || (mask[1] == ':')) return false; std::string::size_type at = mask.find('@'); @@ -718,7 +718,7 @@ int Channel::CountInvisible() int count = 0; for (UserMembIter i = userlist.begin(); i != userlist.end(); i++) { - if (!(i->first->IsModeSet('i'))) + if (!i->first->quitting && !i->first->IsModeSet('i')) count++; } @@ -793,6 +793,8 @@ void Channel::UserList(User *user) for (UserMembIter i = userlist.begin(); i != userlist.end(); i++) { + if (i->first->quitting) + continue; if ((!has_user) && (i->first->IsModeSet('i'))) { /* @@ -1013,7 +1015,8 @@ Invitation* Invitation::Find(Channel* c, LocalUser* u, bool check_expired) if ((check_expired) && (inv->expiry != 0) && (inv->expiry <= ServerInstance->Time())) { /* Expired invite, remove it. */ - ServerInstance->Logs->Log("INVITATION", DEBUG, "Invitation::Find ecountered expired entry: %p expired %s", (void*) inv, ServerInstance->TimeString(inv->expiry).c_str()); + std::string expiration = ServerInstance->TimeString(inv->expiry); + ServerInstance->Logs->Log("INVITATION", DEBUG, "Invitation::Find ecountered expired entry: %p expired %s", (void*) inv, expiration.c_str()); i = locallist.erase(i); inv->cull(); delete inv;