diff options
Diffstat (limited to 'user/qt5-qtsvg/kde-lts.patch')
-rw-r--r-- | user/qt5-qtsvg/kde-lts.patch | 569 |
1 files changed, 25 insertions, 544 deletions
diff --git a/user/qt5-qtsvg/kde-lts.patch b/user/qt5-qtsvg/kde-lts.patch index d48da723b..13e611a4a 100644 --- a/user/qt5-qtsvg/kde-lts.patch +++ b/user/qt5-qtsvg/kde-lts.patch @@ -1,7 +1,7 @@ -From df7c94a391e69adef6e2b7f3d415496c6ba62ab1 Mon Sep 17 00:00:00 2001 +From 62ad7cfc0290d2723e7c0afacfb7dbee6a1b0293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= <robert.loehning@qt.io> Date: Wed, 17 Feb 2021 19:20:42 +0100 -Subject: [PATCH 01/10] Avoid buffer overflow in isSupportedSvgFeature +Subject: [PATCH 1/5] Avoid buffer overflow in isSupportedSvgFeature Fixes oss-fuzz issue 29873. @@ -14,7 +14,7 @@ Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/svg/qsvgstructure.cpp b/src/svg/qsvgstructure.cpp -index b89608b..89c9e4e 100644 +index b89608b5..89c9e4ec 100644 --- a/src/svg/qsvgstructure.cpp +++ b/src/svg/qsvgstructure.cpp @@ -255,9 +255,13 @@ inline static bool isSupportedSvgFeature(const QString &str) @@ -34,48 +34,12 @@ index b89608b..89c9e4e 100644 return str == QLatin1String(wordlist[key]); } -- -2.36.0 +2.49.0 -From b8a829e3883b8a4ac564ac25d20d099797644c24 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Robert=20L=C3=B6hning?= <robert.loehning@qt.io> -Date: Fri, 23 Jul 2021 13:53:47 +0200 -Subject: [PATCH 02/10] Limit font size to avoid numerous overflows - -The font size will be passed through a QFixed in -QFontEngineBox::ascent() and overflow there as well as in further places. - -[ChangeLog] Avoid numerous overflows by limiting font size to 0xffff. -This fixes oss-fuzz issue 31701. - -Pick-to: 5.15 6.1 6.2 -Change-Id: I2d00c5639804af9b056f0efc979e9899c5358cf7 -Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> -(cherry picked from commit 76eeb072cdffc1a8c776ed01864e6751ccbfba85) ---- - src/svg/qsvghandler.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index 9dac05c..e496a54 100644 ---- a/src/svg/qsvghandler.cpp -+++ b/src/svg/qsvghandler.cpp -@@ -1384,7 +1384,8 @@ static void parseFont(QSvgNode *node, - break; - case FontSizeValue: { - QSvgHandler::LengthType dummy; // should always be pixel size -- fontStyle->setSize(parseLength(attributes.fontSize, dummy, handler)); -+ fontStyle->setSize(qMin(parseLength(attributes.fontSize, dummy, handler), -+ qreal(0xffff))); - } - break; - default: --- -2.36.0 - -From 5b684556c7cbe136ff9f665b18a1e8c8e53f3175 Mon Sep 17 00:00:00 2001 +From 8d0ba96f68d8bf4ae2c6139ac88a026965bc6ef2 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <albert.astals.cid@kdab.com> Date: Mon, 11 Oct 2021 11:13:57 +0200 -Subject: [PATCH 03/10] Support font size not in pixels +Subject: [PATCH 2/5] Support font size not in pixels Fixes: QTBUG-97422 Pick-to: 6.2 @@ -87,10 +51,10 @@ Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index e496a54..6862494 100644 +index dd9b7164..f37bf42e 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp -@@ -1383,9 +1383,10 @@ static void parseFont(QSvgNode *node, +@@ -1393,9 +1393,10 @@ static void parseFont(QSvgNode *node, case FontSizeNone: break; case FontSizeValue: { @@ -105,12 +69,12 @@ index e496a54..6862494 100644 break; default: -- -2.36.0 +2.49.0 -From dd33c643251fbdcc9ed91f3617646a4367a434b7 Mon Sep 17 00:00:00 2001 +From 1342b53893ed984198d0664db491e3f4e353b405 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <albert.astals.cid@kdab.com> Date: Mon, 11 Oct 2021 11:11:26 +0200 -Subject: [PATCH 04/10] Fix text x/y when the length is not in pixels +Subject: [PATCH 3/5] Fix text x/y when the length is not in pixels Fixes: QTBUG-97421 Pick-to: 6.2 @@ -122,10 +86,10 @@ Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> 1 file changed, 2 insertions(+) diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index 6862494..ba894bc 100644 +index f37bf42e..836f9a65 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp -@@ -3346,7 +3346,9 @@ static QSvgNode *createTextNode(QSvgNode *parent, +@@ -3353,7 +3353,9 @@ static QSvgNode *createTextNode(QSvgNode *parent, //### editable and rotate not handled QSvgHandler::LengthType type; qreal nx = parseLength(x, type, handler); @@ -136,111 +100,12 @@ index 6862494..ba894bc 100644 QSvgNode *text = new QSvgText(parent, QPointF(nx, ny)); return text; -- -2.36.0 - -From 1f59a48d239045bda7cfd43ed48fbf8553d36756 Mon Sep 17 00:00:00 2001 -From: Eirik Aavitsland <eirik.aavitsland@qt.io> -Date: Wed, 7 Jul 2021 10:09:58 +0200 -Subject: [PATCH 05/10] Fix parsing of arc elements in paths - -The arc element takes some flag parameters, which could be mixed up -with the float parameters since svg does not require delimiting -characters here. Hence legal svg would be misread.. - -Fixes: QTBUG-92184 -Pick-to: 6.2 6.1 5.15 -Change-Id: I5885c50d47e2e06ab0f02afefb7a5585c5c713ff -Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> -(cherry picked from commit b313862fa04d9a5403c16670a0d911eb3c633ee5) ---- - src/svg/qsvghandler.cpp | 19 ++++++++++++++++--- - tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp | 14 ++++++++++++++ - 2 files changed, 30 insertions(+), 3 deletions(-) - -diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index ba894bc..bfacd56 100644 ---- a/src/svg/qsvghandler.cpp -+++ b/src/svg/qsvghandler.cpp -@@ -728,15 +728,25 @@ static QVector<qreal> parseNumbersList(const QChar *&str) - return points; - } - --static inline void parseNumbersArray(const QChar *&str, QVarLengthArray<qreal, 8> &points) -+static inline void parseNumbersArray(const QChar *&str, QVarLengthArray<qreal, 8> &points, -+ const char *pattern = nullptr) - { -+ const size_t patternLen = qstrlen(pattern); - while (str->isSpace()) - ++str; - while (isDigit(str->unicode()) || - *str == QLatin1Char('-') || *str == QLatin1Char('+') || - *str == QLatin1Char('.')) { - -- points.append(toDouble(str)); -+ if (patternLen && pattern[points.size() % patternLen] == 'f') { -+ // flag expected, may only be 0 or 1 -+ if (*str != QLatin1Char('0') && *str != QLatin1Char('1')) -+ return; -+ points.append(*str == QLatin1Char('0') ? 0.0 : 1.0); -+ ++str; -+ } else { -+ points.append(toDouble(str)); -+ } - - while (str->isSpace()) - ++str; -@@ -1631,8 +1641,11 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - ++str; - QChar endc = *end; - *const_cast<QChar *>(end) = 0; // parseNumbersArray requires 0-termination that QStringRef cannot guarantee -+ const char *pattern = nullptr; -+ if (pathElem == QLatin1Char('a') || pathElem == QLatin1Char('A')) -+ pattern = "rrrffrr"; - QVarLengthArray<qreal, 8> arg; -- parseNumbersArray(str, arg); -+ parseNumbersArray(str, arg, pattern); - *const_cast<QChar *>(end) = endc; - if (pathElem == QLatin1Char('z') || pathElem == QLatin1Char('Z')) - arg.append(0);//dummy -diff --git a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp -index 8f1f03b..36c76ec 100644 ---- a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp -+++ b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp -@@ -74,6 +74,7 @@ private slots: - void fillRule(); - void opacity(); - void paths(); -+ void paths2(); - void displayMode(); - void strokeInherit(); - void testFillInheritance(); -@@ -1047,6 +1048,19 @@ void tst_QSvgRenderer::paths() - } - } - -+void tst_QSvgRenderer::paths2() -+{ -+ const char *svg = -+ "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">" -+ "<path d=\"M 3 8 A 5 5 0 1013 8\" id=\"path1\"/>" -+ "</svg>"; -+ -+ QByteArray data(svg); -+ QSvgRenderer renderer(data); -+ QVERIFY(renderer.isValid()); -+ QCOMPARE(renderer.boundsOnElement(QLatin1String("path1")).toRect(), QRect(3, 8, 10, 5)); -+} -+ - void tst_QSvgRenderer::displayMode() - { - static const char *svgs[] = { --- -2.36.0 +2.49.0 -From 8145bccbefe00a5daffd60c4e9fc11f551018df1 Mon Sep 17 00:00:00 2001 +From 45d600c4f73ae4cdc4cd87f622d680375ba7f573 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen <allan.jensen@qt.io> Date: Fri, 5 Mar 2021 12:52:36 +0100 -Subject: [PATCH 06/10] Improve parsing of "r" +Subject: [PATCH 4/5] Improve parsing of "r" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -256,10 +121,10 @@ Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index bfacd56..9575f14 100644 +index 836f9a65..222b6d89 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp -@@ -2585,6 +2585,8 @@ static QSvgNode *createCircleNode(QSvgNode *parent, +@@ -2579,6 +2579,8 @@ static QSvgNode *createCircleNode(QSvgNode *parent, qreal ncx = toDouble(cx); qreal ncy = toDouble(cy); qreal nr = toDouble(r); @@ -268,7 +133,7 @@ index bfacd56..9575f14 100644 QRectF rect(ncx-nr, ncy-nr, nr*2, nr*2); QSvgNode *circle = new QSvgCircle(parent, rect); -@@ -3055,15 +3057,16 @@ static QSvgStyleProperty *createRadialGradientNode(QSvgNode *node, +@@ -3049,15 +3051,16 @@ static QSvgStyleProperty *createRadialGradientNode(QSvgNode *node, qreal ncx = 0.5; qreal ncy = 0.5; @@ -289,353 +154,12 @@ index bfacd56..9575f14 100644 qreal nfx = ncx; if (!fx.isEmpty()) -- -2.36.0 - -From 4469006285be9994f7b8ab4587f089716f59ebb9 Mon Sep 17 00:00:00 2001 -From: Eirik Aavitsland <eirik.aavitsland@qt.io> -Date: Fri, 2 Jul 2021 16:09:30 +0200 -Subject: [PATCH 07/10] Fix parsing of animation clock values - -Color animation duration parsing mixed seconds and milliseconds. - -Factor out a common function for all clock value parsing, and -add checking for overflow and illegal values as a driveby.. - -Fixes: QTBUG-94878 -Pick-to: 6.2 6.1 5.15 -Change-Id: Ie1d974cd2db55a3d65d7ce02c373021021070489 -Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> -(cherry picked from commit 1da0a668e52994832d8a048772bed65b61cb0e9b) ---- - src/svg/qsvghandler.cpp | 70 ++++++++++++++++++++--------------------- - 1 file changed, 35 insertions(+), 35 deletions(-) - -diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index 9575f14..b542089 100644 ---- a/src/svg/qsvghandler.cpp -+++ b/src/svg/qsvghandler.cpp -@@ -2373,6 +2373,27 @@ static bool parseAnimateNode(QSvgNode *parent, - return true; - } - -+static int parseClockValue(QString str, bool *ok) -+{ -+ int res = 0; -+ int ms = 1000; -+ str = str.trimmed(); -+ if (str.endsWith(QLatin1String("ms"))) { -+ str.chop(2); -+ ms = 1; -+ } else if (str.endsWith(QLatin1String("s"))) { -+ str.chop(1); -+ } -+ double val = ms * toDouble(str, ok); -+ if (ok) { -+ if (val > std::numeric_limits<int>::min() && val < std::numeric_limits<int>::max()) -+ res = static_cast<int>(val); -+ else -+ *ok = false; -+ } -+ return res; -+} -+ - static bool parseAnimateColorNode(QSvgNode *parent, - const QXmlStreamAttributes &attributes, - QSvgHandler *handler) -@@ -2406,23 +2427,13 @@ static bool parseAnimateColorNode(QSvgNode *parent, - } - } - -- int ms = 1000; -- beginStr = beginStr.trimmed(); -- if (beginStr.endsWith(QLatin1String("ms"))) { -- beginStr.chop(2); -- ms = 1; -- } else if (beginStr.endsWith(QLatin1String("s"))) { -- beginStr.chop(1); -- } -- durStr = durStr.trimmed(); -- if (durStr.endsWith(QLatin1String("ms"))) { -- durStr.chop(2); -- ms = 1; -- } else if (durStr.endsWith(QLatin1String("s"))) { -- durStr.chop(1); -- } -- int begin = static_cast<int>(toDouble(beginStr) * ms); -- int end = static_cast<int>((toDouble(durStr) + begin) * ms); -+ bool ok = true; -+ int begin = parseClockValue(beginStr, &ok); -+ if (!ok) -+ return false; -+ int end = begin + parseClockValue(durStr, &ok); -+ if (!ok || end <= begin) -+ return false; - - QSvgAnimateColor *anim = new QSvgAnimateColor(begin, end, 0); - anim->setArgs((targetStr == QLatin1String("fill")), colors); -@@ -2512,24 +2523,13 @@ static bool parseAnimateTransformNode(QSvgNode *parent, - } - } - -- int ms = 1000; -- beginStr = beginStr.trimmed(); -- if (beginStr.endsWith(QLatin1String("ms"))) { -- beginStr.chop(2); -- ms = 1; -- } else if (beginStr.endsWith(QLatin1String("s"))) { -- beginStr.chop(1); -- } -- int begin = static_cast<int>(toDouble(beginStr) * ms); -- durStr = durStr.trimmed(); -- if (durStr.endsWith(QLatin1String("ms"))) { -- durStr.chop(2); -- ms = 1; -- } else if (durStr.endsWith(QLatin1String("s"))) { -- durStr.chop(1); -- ms = 1000; -- } -- int end = static_cast<int>(toDouble(durStr)*ms) + begin; -+ bool ok = true; -+ int begin = parseClockValue(beginStr, &ok); -+ if (!ok) -+ return false; -+ int end = begin + parseClockValue(durStr, &ok); -+ if (!ok || end <= begin) -+ return false; - - QSvgAnimateTransform::TransformType type = QSvgAnimateTransform::Empty; - if (typeStr == QLatin1String("translate")) { --- -2.36.0 - -From 53ada351e2e8ac14d2e428813e959689ca6fe583 Mon Sep 17 00:00:00 2001 -From: Eirik Aavitsland <eirik.aavitsland@qt.io> -Date: Mon, 25 Oct 2021 14:17:55 +0200 -Subject: [PATCH 08/10] Do stricter error checking when parsing path nodes -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The SVG spec mandates that path parsing should terminate on the first -error encountered, and an error be reported. To improve the handling -of corrupt files, implement such error handling, and also limit the -number of QPainterPath elements to a reasonable range. - -Fixes: QTBUG-96044 -Pick-to: 6.2 5.15 5.12 -Change-Id: Ic5e65d6b658516d6f1317c72de365c8c7ad81891 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> -Reviewed-by: Robert Löhning <robert.loehning@qt.io> -(cherry picked from commit 36cfd9efb9b22b891adee9c48d30202289cfa620) ---- - src/svg/qsvghandler.cpp | 59 +++++++++++++++++------------------------ - 1 file changed, 25 insertions(+), 34 deletions(-) - -diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index b542089..2ea80ed 100644 ---- a/src/svg/qsvghandler.cpp -+++ b/src/svg/qsvghandler.cpp -@@ -1627,6 +1627,7 @@ static void pathArc(QPainterPath &path, - - static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - { -+ const int maxElementCount = 0x7fff; // Assume file corruption if more path elements than this - qreal x0 = 0, y0 = 0; // starting point - qreal x = 0, y = 0; // current point - char lastMode = 0; -@@ -1634,7 +1635,8 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - const QChar *str = dataStr.constData(); - const QChar *end = str + dataStr.size(); - -- while (str != end) { -+ bool ok = true; -+ while (ok && str != end) { - while (str->isSpace() && (str + 1) != end) - ++str; - QChar pathElem = *str; -@@ -1651,14 +1653,13 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - arg.append(0);//dummy - const qreal *num = arg.constData(); - int count = arg.count(); -- while (count > 0) { -+ while (ok && count > 0) { - qreal offsetX = x; // correction offsets - qreal offsetY = y; // for relative commands - switch (pathElem.unicode()) { - case 'm': { - if (count < 2) { -- num++; -- count--; -+ ok = false; - break; - } - x = x0 = num[0] + offsetX; -@@ -1675,8 +1676,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - break; - case 'M': { - if (count < 2) { -- num++; -- count--; -+ ok = false; - break; - } - x = x0 = num[0]; -@@ -1702,8 +1702,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - break; - case 'l': { - if (count < 2) { -- num++; -- count--; -+ ok = false; - break; - } - x = num[0] + offsetX; -@@ -1716,8 +1715,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - break; - case 'L': { - if (count < 2) { -- num++; -- count--; -+ ok = false; - break; - } - x = num[0]; -@@ -1757,8 +1755,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - break; - case 'c': { - if (count < 6) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c1(num[0] + offsetX, num[1] + offsetY); -@@ -1774,8 +1771,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'C': { - if (count < 6) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c1(num[0], num[1]); -@@ -1791,8 +1787,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 's': { - if (count < 4) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c1; -@@ -1813,8 +1808,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'S': { - if (count < 4) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c1; -@@ -1835,8 +1829,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'q': { - if (count < 4) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c(num[0] + offsetX, num[1] + offsetY); -@@ -1851,8 +1844,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'Q': { - if (count < 4) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF c(num[0], num[1]); -@@ -1867,8 +1859,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 't': { - if (count < 2) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF e(num[0] + offsetX, num[1] + offsetY); -@@ -1888,8 +1879,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'T': { - if (count < 2) { -- num += count; -- count = 0; -+ ok = false; - break; - } - QPointF e(num[0], num[1]); -@@ -1909,8 +1899,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - case 'a': { - if (count < 7) { -- num += count; -- count = 0; -+ ok = false; - break; - } - qreal rx = (*num++); -@@ -1932,8 +1921,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - break; - case 'A': { - if (count < 7) { -- num += count; -- count = 0; -+ ok = false; - break; - } - qreal rx = (*num++); -@@ -1954,12 +1942,15 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path) - } - break; - default: -- return false; -+ ok = false; -+ break; - } - lastMode = pathElem.toLatin1(); -+ if (path.elementCount() > maxElementCount) -+ ok = false; - } - } -- return true; -+ return ok; - } - - static bool parseStyle(QSvgNode *node, -@@ -2997,8 +2988,8 @@ static QSvgNode *createPathNode(QSvgNode *parent, - - QPainterPath qpath; - qpath.setFillRule(Qt::WindingFill); -- //XXX do error handling -- parsePathDataFast(data, qpath); -+ if (!parsePathDataFast(data, qpath)) -+ qCWarning(lcSvgHandler, "Invalid path data; path truncated."); - - QSvgNode *path = new QSvgPath(parent, qpath); - return path; --- -2.36.0 +2.49.0 -From 41ab201cd44e4f0c7f6d22fca862d5650bf574ee Mon Sep 17 00:00:00 2001 +From 9c149213f46b844607cf7db8f800d906db3a682f Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland <eirik.aavitsland@qt.io> Date: Mon, 25 Oct 2021 14:43:09 +0200 -Subject: [PATCH 09/10] SVG Image reading: Reject oversize svgs as corrupt +Subject: [PATCH 5/5] SVG Image reading: Reject oversize svgs as corrupt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -656,10 +180,10 @@ asturmlechner 2022-01-03: resolve conflict with preceding dev branch 1 file changed, 2 insertions(+) diff --git a/src/plugins/imageformats/svg/qsvgiohandler.cpp b/src/plugins/imageformats/svg/qsvgiohandler.cpp -index 4136aaf..fd3529a 100644 +index 561e77e9..12e05748 100644 --- a/src/plugins/imageformats/svg/qsvgiohandler.cpp +++ b/src/plugins/imageformats/svg/qsvgiohandler.cpp -@@ -189,6 +189,8 @@ bool QSvgIOHandler::read(QImage *image) +@@ -191,6 +191,8 @@ bool QSvgIOHandler::read(QImage *image) } } if (!finalSize.isEmpty()) { @@ -669,48 +193,5 @@ index 4136aaf..fd3529a 100644 QPainter p(image); d->r.render(&p, bounds); -- -2.36.0 - -From 23b8cf7d833c335d7735855570c05e9e0893a9b7 Mon Sep 17 00:00:00 2001 -From: Eirik Aavitsland <eirik.aavitsland@qt.io> -Date: Wed, 5 Jan 2022 09:48:22 +0100 -Subject: [PATCH 10/10] Unconditionally stop parsing after the svg end tag -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -A QSvghandler may be created either with an external QXmlStreamReader -object, or with a bytearray/iodevice, in which case it will create its -own stream reader. The check to end parisng at the </svg> tag was -active only in the first case. This could result in different behavior -when reading an svg image from file vs. reading it from a bytearray -or resource. - -Fixes: QTBUG-99407 -Pick-to: 6.3 6.2 5.15 -Change-Id: I187b39256f2b16ea952a3ae1b77c067ff96e4155 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> -Reviewed-by: Robert Löhning <robert.loehning@qt.io> -(cherry picked from commit 1749388cdc765fca4206aaf0f84ac9b0877dfc9a) ---- - src/svg/qsvghandler.cpp | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp -index 2ea80ed..f2653af 100644 ---- a/src/svg/qsvghandler.cpp -+++ b/src/svg/qsvghandler.cpp -@@ -3696,9 +3696,7 @@ void QSvgHandler::parse() - case QXmlStreamReader::EndElement: - endElement(xml->name()); - ++remainingUnfinishedElements; -- // if we are using somebody else's qxmlstreamreader -- // we should not read until the end of the stream -- done = !m_ownsReader && (xml->name() == QLatin1String("svg")); -+ done = (xml->name() == QLatin1String("svg")); - break; - case QXmlStreamReader::Characters: - characters(xml->text()); --- -2.36.0 +2.49.0 |