Properly handle multiple spaces in a row in msgs sent by (faulty?) ircds
authorManuel Nickschas <sputnick@quassel-irc.org>
Thu, 7 May 2009 18:53:14 +0000 (20:53 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 7 May 2009 18:54:35 +0000 (20:54 +0200)
Fixes #681.

src/core/ircserverhandler.cpp

index 7614d6e..14b3507 100644 (file)
@@ -57,11 +57,23 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) {
   // NOTE: This assumes that this is true in raw encoding, but well, hopefully there are no servers running in japanese on protocol level...
   int idx = msg.indexOf(" :");
   if(idx >= 0) {
-    if(msg.length() > idx + 2) trailing = msg.mid(idx + 2);
+    if(msg.length() > idx + 2)
+      trailing = msg.mid(idx + 2);
     msg = msg.left(idx);
   }
   // OK, now it is safe to split...
   QList<QByteArray> params = msg.split(' ');
+
+  // This could still contain empty elements due to (faulty?) ircds sending multiple spaces in a row
+  // Also, QByteArray is not nearly as convenient to work with as QString for such things :)
+  QList<QByteArray>::iterator iter = params.begin();
+  while(iter != params.end()) {
+    if(iter->isEmpty())
+      iter = params.erase(iter);
+    else
+      ++iter;
+  }
+
   if(!trailing.isEmpty()) params << trailing;
   if(params.count() < 1) {
     qWarning() << "Received invalid string from server!";