From b359cfe9fdd2427993dc0b2f3f605fd69bbe6bd2 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Mon, 3 Jun 2019 00:16:30 -0500 Subject: [PATCH 1/1] multilineedit: handle unterminated mIRC codes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. Bug originally found by @sroracle, reported to Adélie Linux, patched by yours truly. --- src/uisupport/multilineedit.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/uisupport/multilineedit.cpp b/src/uisupport/multilineedit.cpp index 166e12cc..a9a2ae24 100644 --- a/src/uisupport/multilineedit.cpp +++ b/src/uisupport/multilineedit.cpp @@ -601,6 +601,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.20.1