Stop RFC-violating IRC servers from crashing quassel
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 Apr 2010 20:04:55 +0000 (22:04 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 Apr 2010 20:04:55 +0000 (22:04 +0200)
Seriously, '%' is not allowed in nicknames. But who cares about RFCs...

Escaping this now in the nickname as well, and additionally prevent the style engine
from hanging itself if it still encounters an unescaped % (even though that can't happen now
anymore). Thanks to ricky26 for the heads up and a patch.

Fixes #946, fixes #947

src/uisupport/uistyle.cpp

index 05895cd..f23ec19 100644 (file)
@@ -484,6 +484,7 @@ UiStyle::StyledString UiStyle::styleString(const QString &s_, quint32 baseFormat
       if(s[pos+1] == 'D') code += s[pos+2];
       FormatType ftype = formatType(code);
       if(ftype == Invalid) {
+        pos++;
         qWarning() << (QString("Invalid format code in string: %1").arg(s));
         continue;
       }
@@ -562,7 +563,8 @@ void UiStyle::StyledMessage::style() const {
   QString bufferName = bufferInfo().bufferName();
   bufferName.replace('%', "%%"); // well, you _can_ have a % in a buffername apparently... -_-
   host.replace('%', "%%");       // hostnames too...
-  user.replace('%', "%%");       // and the username.
+  user.replace('%', "%%");       // and the username...
+  nick.replace('%', "%%");       // ... and then there's totally RFC-violating servers like justin.tv m(
   const int maxNetsplitNicks = 15;
 
   QString t;