From 54eae2d610bee85a40050d76fc0b01cf6a181f6e Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 22 Apr 2022 10:45:36 -0700 Subject: [PATCH] QTextEngine: don't pass empty data to bidiReorder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The algorithm in QTextEngine::bidiReorder() doesn't like an empty level and visual order list. Found by GCC 12's slightly misleading warning: qtextengine.cpp:3838:29: error: ‘levels’ may be used uninitialized [-Werror=maybe-uninitialized] qtextengine.cpp:1174:6: note: by argument 2 of type ‘const quint8*’ {aka ‘const unsigned char*’} to ‘static void QTextEngine::bidiReorder(int, const quint8*, int*)’ declared here qtextengine.cpp:3835:28: note: ‘levels’ declared here 3835 | QVarLengthArray levels(nItems); | ^~~~~~ Pick-to: 6.2 6.3 Change-Id: If05aeeb7176e4f13af9afffd16e8490f131f160e Reviewed-by: Lars Knoll --- src/gui/text/qtextengine.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 97b9836856d..c7e5c19c31f 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -3832,10 +3832,12 @@ QTextLineItemIterator::QTextLineItemIterator(QTextEngine *_eng, int _lineNum, co x += eng->alignLine(line); - QVarLengthArray levels(nItems); - for (int i = 0; i < nItems; ++i) - levels[i] = eng->layoutData->items.at(i + firstItem).analysis.bidiLevel; - QTextEngine::bidiReorder(nItems, levels.data(), visualOrder.data()); + if (nItems > 0) { + QVarLengthArray levels(nItems); + for (int i = 0; i < nItems; ++i) + levels[i] = eng->layoutData->items.at(i + firstItem).analysis.bidiLevel; + QTextEngine::bidiReorder(nItems, levels.data(), visualOrder.data()); + } eng->shapeLine(line); }