File 0001-Fix-infinite-layout-loop-with-negative-line-width.patch of Package qt6-base.30866

From 78416e0ca4cf9d74c1a778fe448bc946a7ded8c2 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Thu, 05 Jan 2023 09:20:42 +0100
Subject: [PATCH] Fix infinite layout loop with negative line width

Setting a negative line width does not make much sense, but in
earlier Qt versions, this work the same as if the line width was 0
(just give you the minimal layout given wrapping constraints).

But since 991c056438b311566bc4ea543af0f33dfd5dffbb, we check if
current width > line width at an earlier point, and because 0 > -1,
we would exit immediately before adding any characters to the text
line.

To restore the behavior in earlier versions, we set the minimum
possible line width to 0.

Fixes: QTBUG-109474
Change-Id: Iceadd5135681f61b30de8221853834983941c5a4
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Reviewed-by: hjk <hjk@qt.io>
(cherry picked from commit 49a63d375972079ae3000c8b7d512d58d4de32bb)
---

diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index aeee165..c6fd99e 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1612,10 +1612,7 @@
         return;
     }
 
-    if (width > QFIXED_MAX)
-        width = QFIXED_MAX;
-
-    line.width = QFixed::fromReal(width);
+    line.width = QFixed::fromReal(qBound(0.0, width, qreal(QFIXED_MAX)));
     if (line.length
         && line.textWidth <= line.width
#         && line.from + line.length == eng->layoutData->string.size())
         && line.from + line.length == eng->layoutData->string.length())
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index 9e6daf8..cf835fe 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -126,6 +126,7 @@
     void softHyphens();
     void min_maximumWidth_data();
     void min_maximumWidth();
+    void negativeLineWidth();
 
 private:
     QFont testFont;
@@ -2715,5 +2716,16 @@
     }
 }
 
+void tst_QTextLayout::negativeLineWidth()
+{
+    QTextLayout layout;
+    layout.setText("Foo bar");
+    layout.beginLayout();
+    QTextLine line = layout.createLine();
+    line.setLineWidth(-1);
+    QVERIFY(line.textLength() > 0);
+    layout.endLayout();
+}
+
 QTEST_MAIN(tst_QTextLayout)
 #include "tst_qtextlayout.moc"
openSUSE Build Service is sponsored by