From 391cdf6c2595060ff3b2adb54f5b2fc8ebd7cc04 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Mon, 3 Jun 2019 00:16:30 -0500
Subject: [PATCH] multilineedit: handle unterminated mIRC codes

Currently, if an unterminated mIRC code is pasted into Quassel, trying to
go through input line history will cause a deadlock.  This breaks the loop
at the cost of possibly mangling the formatting of the line somewhat.
This is seen as more acceptable than locking up, and the line is invalid
anyway.

Reproducer:

```sh
printf '\00303,08HONK' | xclip -selection clipboard
```

Paste into Quassel, send, press Up arrow key.
---
 src/uisupport/multilineedit.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/uisupport/multilineedit.cpp b/src/uisupport/multilineedit.cpp
index 133a2433..b13834c5 100644
--- a/src/uisupport/multilineedit.cpp
+++ b/src/uisupport/multilineedit.cpp
@@ -645,6 +645,10 @@ QString MultiLineEdit::convertMircCodesToHtml(const QString &text)
         }
 
         posRight = text.indexOf(mircCode.cap(), posRight + 1);
+        if (posRight == -1) {
+            words << text.mid(posLeft);
+            break;  // unclosed color code; can't process
+        }
         words << text.mid(posLeft, posRight + 1 - posLeft);
         posLeft = posRight + 1;
     }
-- 
2.21.0