From f48d324241a262695fed259e87bbf7cf83ab9df0 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Wed, 30 Sep 2009 14:10:31 +0200 Subject: [PATCH] Check for IrcUser's existence in handleMode() --- src/core/ircserverhandler.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 6dfb8383..5c3fe827 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -265,22 +265,26 @@ void IrcServerHandler::handleMode(const QString &prefix, const QList // user channel modes (op, voice, etc...) if(paramOffset < params.count()) { IrcUser *ircUser = network()->ircUser(params[paramOffset]); - if(add) { - bool handledByNetsplit = false; - if(!_netsplits.empty()) { - foreach(Netsplit* n, _netsplits) { - handledByNetsplit = n->userAlreadyJoined(ircUser->hostmask(), channel->name()); - if(handledByNetsplit) { - n->addMode(ircUser->hostmask(), channel->name(), QString(modes[c])); - break; + if(!ircUser) { + qWarning() << Q_FUNC_INFO << "Unknown IrcUser:" << params[paramOffset]; + } else { + if(add) { + bool handledByNetsplit = false; + if(!_netsplits.empty()) { + foreach(Netsplit* n, _netsplits) { + handledByNetsplit = n->userAlreadyJoined(ircUser->hostmask(), channel->name()); + if(handledByNetsplit) { + n->addMode(ircUser->hostmask(), channel->name(), QString(modes[c])); + break; + } } } + if(!handledByNetsplit) + channel->addUserMode(ircUser, QString(modes[c])); } - if(!handledByNetsplit) - channel->addUserMode(ircUser, QString(modes[c])); + else + channel->removeUserMode(ircUser, QString(modes[c])); } - else - channel->removeUserMode(ircUser, QString(modes[c])); } else { qWarning() << "Received MODE with too few parameters:" << serverDecode(params); } -- 2.20.1