From 1dcfd9432870b54c6003eb8e0978ccfe817fb9f7 Mon Sep 17 00:00:00 2001 From: James Graham Date: Sun, 24 Mar 2024 10:01:00 +0000 Subject: [PATCH] Fix Message Components for Tags with Attributes Don't assume that the close tag is the length of the start tag +1 BUG: 482331 --- autotests/texthandlertest.cpp | 13 +++++++++++++ src/texthandler.cpp | 5 +++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/autotests/texthandlertest.cpp b/autotests/texthandlertest.cpp index d62124b97..b943b0182 100644 --- a/autotests/texthandlertest.cpp +++ b/autotests/texthandlertest.cpp @@ -529,6 +529,19 @@ void TextHandlerTest::componentOutput_data() QTest::newRow("inline code single block") << QStringLiteral("https://kde.org") << QList{ MessageComponent{MessageComponentType::Text, QStringLiteral("https://kde.org"), {}}}; + QTest::newRow("long start tag") + << QStringLiteral( + "Ah, you mean something like
# main.qml\nimport CustomQml\n...\nControls.TextField { id: "
+               "someField }\nCustomQml {\n    someTextProperty: someField.text\n}\n
Sure you can, it's still local to the same file where you " + "defined the id") + << QList{ + MessageComponent{MessageComponentType::Text, QStringLiteral("Ah, you mean something like"), {}}, + MessageComponent{ + MessageComponentType::Code, + QStringLiteral( + "# main.qml\nimport CustomQml\n...\nControls.TextField { id: someField }\nCustomQml {\n someTextProperty: someField.text\n}"), + QVariantMap{{QStringLiteral("class"), QStringLiteral("qml")}}}, + MessageComponent{MessageComponentType::Text, QStringLiteral("Sure you can, it's still local to the same file where you defined the id"), {}}}; } void TextHandlerTest::componentOutput() diff --git a/src/texthandler.cpp b/src/texthandler.cpp index 12e2535dc..0b6dd8e76 100644 --- a/src/texthandler.cpp +++ b/src/texthandler.cpp @@ -307,13 +307,14 @@ int TextHandler::nextBlockPos(const QString &string) return string.size(); } - int closeTagPos = string.indexOf(QStringLiteral("").arg(tagType)); + const auto closeTag = QStringLiteral("").arg(tagType); + int closeTagPos = string.indexOf(closeTag); // If the close tag can't be found assume malformed html and process as single block. if (closeTagPos == -1) { return string.size(); } - return closeTagPos + tag.size() + 1; + return closeTagPos + closeTag.size(); } MessageComponent TextHandler::nextBlock(const QString &string,