summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-03-01 17:06:50 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-08-31 08:11:46 +0200
commit6acc5212815816af0e0c6c04519a511fccf77a6a (patch)
treeb165e61096e989895d8b897a3748b6dbd0389a94
parent977f1e8c448ce3d6c5435f4151df115d73041fc2 (diff)
downloadqtsvg-6acc5212815816af0e0c6c04519a511fccf77a6a.tar.gz
Fix assert with wrong number of argument to animateTransform
Pick-to: 6.4 6.2 5.15 Change-Id: I8e864ab4213d65866b0004f115f4e7c7bf7173d5 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
-rw-r--r--src/svg/qsvghandler.cpp2
-rw-r--r--tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp18
2 files changed, 20 insertions, 0 deletions
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 677dc97..e88e83b 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -2465,6 +2465,8 @@ static bool parseAnimateTransformNode(QSvgNode *parent,
++s;
}
}
+ if (vals.count() % 3 != 0)
+ return false;
bool ok = true;
int begin = parseClockValue(beginStr, &ok);
diff --git a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
index 78c87eb..7e4a5ae 100644
--- a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
+++ b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
@@ -62,6 +62,8 @@ private slots:
void oss_fuzz_24131();
void oss_fuzz_24738();
void imageRendering();
+ void illegalAnimateTransform_data();
+ void illegalAnimateTransform();
#ifndef QT_NO_COMPRESS
void testGzLoading();
@@ -1677,6 +1679,22 @@ void tst_QSvgRenderer::imageRendering() {
}
}
+void tst_QSvgRenderer::illegalAnimateTransform_data()
+{
+ QTest::addColumn<QByteArray>("svg");
+
+ QTest::newRow("case1") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" values=\"8,0,5,0\">");
+ QTest::newRow("case2") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" values=\"1,2\">");
+ QTest::newRow("case3") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" from=\".. 5 2\" to=\"f\">");
+ QTest::newRow("case4") << QByteArray("<svg><animateTransform type=\"scale\" begin=\"1\" dur=\"2\" by=\"--,..\">");
+}
+
+void tst_QSvgRenderer::illegalAnimateTransform()
+{
+ QFETCH(QByteArray, svg);
+ QSvgRenderer renderer;
+ QVERIFY(!renderer.load(svg)); // also shouldn't assert
+}
QTEST_MAIN(tst_QSvgRenderer)
#include "tst_qsvgrenderer.moc"