Don't crash on very long inputs
[quassel.git] / src / uisupport / uistyle.cpp
index 5fd929a..8228b8f 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2014 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -491,12 +491,16 @@ QList<QTextLayout::FormatRange> UiStyle::toTextLayoutList(const FormatList &form
 UiStyle::StyledString UiStyle::styleString(const QString &s_, quint32 baseFormat)
 {
     QString s = s_;
+    StyledString result;
+    result.formatList.append(qMakePair((quint16)0, baseFormat));
+
     if (s.length() > 65535) {
+        // We use quint16 for indexes
         qWarning() << QString("String too long to be styled: %1").arg(s);
-        return StyledString();
+        result.plainText = s;
+        return result;
     }
-    StyledString result;
-    result.formatList.append(qMakePair((quint16)0, baseFormat));
+
     quint32 curfmt = baseFormat;
     int pos = 0; quint16 length = 0;
     for (;;) {
@@ -572,6 +576,9 @@ QString UiStyle::mircToInternal(const QString &mirc_)
                 case '\x0f':
                     mirc += "%O";
                     break;
+                case '\x09':
+                    mirc += "        ";
+                    break;
                 case '\x12':
                 case '\x16':
                     mirc += "%R";
@@ -589,10 +596,6 @@ QString UiStyle::mircToInternal(const QString &mirc_)
                     mirc += QChar(0x2400 + c.unicode());
             }
         } else {
-            if (c == '\t') {
-                mirc += "        ";
-                continue;
-            }
             if (c == '%')
                 mirc += c;
             mirc += c;