From dc30a4a2bd1fbfaae45a2a23460ba88e108f75b2 Mon Sep 17 00:00:00 2001 From: hjk <hjk121@nokiamail.com> Date: Fri, 29 Nov 2013 17:03:57 +0100 Subject: [PATCH] FakeVim: Prevent crash in scrollToLine with Qt 4 There seem to be cases where QTextLines::isValid() returns true but its lines_ are empty. Change-Id: Ia4b9a66aec8d10754f7ff7dd0c90e7295e2a2220 Reviewed-by: hjk <hjk121@nokiamail.com> --- src/plugins/fakevim/fakevimhandler.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 5c14eb1b0ce..7460bb1de79 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -6477,10 +6477,19 @@ void FakeVimHandler::Private::scrollToLine(int line) EDITOR(setTextCursor(tc2)); EDITOR(ensureCursorVisible()); + int offset = 0; const QTextBlock block = document()->findBlockByLineNumber(line); - const QTextLine textLine = block.isValid() - ? block.layout()->lineAt(line - block.firstLineNumber()) : QTextLine(); - tc2.setPosition(block.position() + (textLine.isValid() ? textLine.textStart() : 0)); + if (block.isValid()) { + const int blockLineCount = block.layout()->lineCount(); + const int lineInBlock = line - block.firstLineNumber(); + if (0 <= lineInBlock && lineInBlock < blockLineCount) { + QTextLine textLine = block.layout()->lineAt(lineInBlock); + offset = textLine.textStart(); + } else { +// QTC_CHECK(false); + } + } + tc2.setPosition(block.position() + offset); EDITOR(setTextCursor(tc2)); EDITOR(ensureCursorVisible()); -- GitLab