From 3bbdde4a0caba93ffd15981374be6a840183fc8f Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Tue, 13 Apr 2010 22:04:55 +0200 Subject: [PATCH] Stop RFC-violating IRC servers from crashing quassel 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 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 05895cd1..f23ec19d 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -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; -- 2.20.1