Fixing $FU in some server handlers. ircUser() does not always return a valid pointer...
[quassel.git] / src / core / ircserverhandler.cpp
index dba9f85..3f15015 100644 (file)
@@ -155,11 +155,16 @@ void IrcServerHandler::defaultHandler(QString cmd, QString prefix, QList<QByteAr
         emit displayMsg(Message::Error, "", params.join(" "), prefix);
         break;
       // Server error messages, display them in red. First param will be appended.
-      case 401: case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442:
+      case 401: 
       { QString channelName = params.takeFirst();
-      emit displayMsg(Message::Error, "", params.join(" ") + " " + channelName, prefix);
-      emit displayMsg(Message::Error, channelName, params.join(" ") + " " + channelName, prefix);
-      break;
+        emit displayMsg(Message::Error, "", params.join(" ") + " " + channelName, prefix);
+        emit displayMsg(Message::Error, channelName, params.join(" ") + " " + channelName, prefix);
+        break;
+      }
+      case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442:
+      { QString channelName = params.takeFirst();
+        emit displayMsg(Message::Error, "", params.join(" ") + " " + channelName, prefix);
+        break;
       }
       // Server error messages which will be displayed with a colon between the first param and the rest
       case 413: case 414: case 423: case 441: case 444: case 461:
@@ -412,12 +417,17 @@ void IrcServerHandler::handle301(QString prefix, QList<QByteArray> params) {
   if(_whois) {
     emit displayMsg(Message::Server, "", tr("[Whois] %1 is away: \"%2\"").arg(nickName).arg(awayMessage));
   } else {
-    int now = QDateTime::currentDateTime().toTime_t();
-    int silenceTime = 60;
-    if(ircuser && ircuser->lastAwayMessage() + silenceTime < now) {
+    if(ircuser) {
+      int now = QDateTime::currentDateTime().toTime_t();
+      int silenceTime = 60;
+      if(ircuser->lastAwayMessage() + silenceTime < now) {
+        emit displayMsg(Message::Server, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage));
+      }
+      ircuser->setLastAwayMessage(now);
+    } else {
+      // probably should not happen
       emit displayMsg(Message::Server, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage));
     }
-    ircuser->setLastAwayMessage(now);
   }
 }
 
@@ -532,13 +542,15 @@ void IrcServerHandler::handle352(QString prefix, QList<QByteArray> params) {
   Q_UNUSED(prefix)
   QString channel = serverDecode(params[0]);
   IrcUser *ircuser = network()->ircUser(serverDecode(params[4]));
-  ircuser->setUser(serverDecode(params[1]));
-  ircuser->setHost(serverDecode(params[2]));
+  if(ircuser) {
+    ircuser->setUser(serverDecode(params[1]));
+    ircuser->setHost(serverDecode(params[2]));
 
-  bool away = serverDecode(params[5]).startsWith("G") ? true : false;
-  ircuser->setAway(away);
-  ircuser->setServer(serverDecode(params[3])); 
-  ircuser->setRealName(serverDecode(params.last()).section(" ", 1));
+    bool away = serverDecode(params[5]).startsWith("G") ? true : false;
+    ircuser->setAway(away);
+    ircuser->setServer(serverDecode(params[3])); 
+    ircuser->setRealName(serverDecode(params.last()).section(" ", 1));
+  }
 
   emit displayMsg(Message::Server, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
 }