From 76aa8c1534b4f516b8a16d2b64d89e0717212676 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Mon, 20 Feb 2023 19:06:45 +0100 Subject: [PATCH] [Bugfix] Gui: fix bug in expression completer tokenizing, fixes #8590 --- src/Gui/ExpressionCompleter.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Gui/ExpressionCompleter.cpp b/src/Gui/ExpressionCompleter.cpp index 3a1bb3492b..bef42154df 100644 --- a/src/Gui/ExpressionCompleter.cpp +++ b/src/Gui/ExpressionCompleter.cpp @@ -820,9 +820,12 @@ void ExpressionCompleter::slotUpdate(const QString & prefix, int pos) std::transform(result.cbegin(), result.cend(), std::back_inserter(tokens), - [](const std::tuple& item) { + [&](const std::tuple& item) { return std::make_tuple( - get<0>(item), get<1>(item), QString::fromStdString(get<2>(item))); + get<0>(item), + QString::fromStdString(expr.toStdString().substr(0,get<1>(item))).size(), + QString::fromStdString(get<2>(item)) + ); }); return tokens; }; @@ -883,7 +886,9 @@ void ExpressionCompleter::slotUpdate(const QString & prefix, int pos) } // Not an unclosed string and the last character is a space - if (!stringing && !prefix.isEmpty() && prefix[prefixEnd-1] == QChar(32)) { + if (!stringing && !prefix.isEmpty() && + prefixEnd > 0 && prefixEnd <= prefix.size() && + prefix[prefixEnd-1] == QChar(32)) { if (auto itemView = popup()) itemView->setVisible(false); return;