summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2023-10-10 11:41:41 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-10-15 01:12:22 +0000
commit0c13455434992b2588968541f083a3177b6e829a (patch)
tree69c6de3395cdc5bb556348d689f12b74f4922b18
parent97db6d90182a53cc0967e61ce02d2ef14fec6e6d (diff)
Make sure we don't load invalid SVGs twice6.5
Fixes a bug where loading an invalid SVG that happens to be valid XML could behave differently in QML and C++, because readimage() in qquickpixmapcache.cpp calls QImageReader::size() twice. Task-number: QTBUG-117944 Change-Id: Ibef7f54627c76414c66f81804f5f46f2db3594ba Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> (cherry picked from commit a090bd1f9a7bfa14f06b14570c6a5a37843931c6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit 0bfb420574f192a097c7ab3dbdd452b39464dc84)
-rw-r--r--src/plugins/imageformats/svg/qsvgiohandler.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/plugins/imageformats/svg/qsvgiohandler.cpp b/src/plugins/imageformats/svg/qsvgiohandler.cpp
index b04ee6b..570c982 100644
--- a/src/plugins/imageformats/svg/qsvgiohandler.cpp
+++ b/src/plugins/imageformats/svg/qsvgiohandler.cpp
@@ -19,7 +19,7 @@ class QSvgIOHandlerPrivate
{
public:
QSvgIOHandlerPrivate(QSvgIOHandler *qq)
- : q(qq), loaded(false), readDone(false), backColor(Qt::transparent)
+ : q(qq), loadAttempted(false), loadStatus(false), readDone(false), backColor(Qt::transparent)
{}
bool load(QIODevice *device);
@@ -31,7 +31,8 @@ public:
QRect clipRect;
QSize scaledSize;
QRect scaledClipRect;
- bool loaded;
+ bool loadAttempted;
+ bool loadStatus;
bool readDone;
QColor backColor;
};
@@ -39,8 +40,9 @@ public:
bool QSvgIOHandlerPrivate::load(QIODevice *device)
{
- if (loaded)
- return true;
+ if (loadAttempted)
+ return loadStatus;
+ loadAttempted = true;
if (q->format().isEmpty())
q->canRead();
@@ -63,10 +65,10 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device)
if (res) {
defaultSize = r.defaultSize();
- loaded = true;
+ loadStatus = true;
}
- return loaded;
+ return loadStatus;
}
@@ -105,7 +107,7 @@ bool QSvgIOHandler::canRead() const
{
if (!device())
return false;
- if (d->loaded && !d->readDone)
+ if (d->loadStatus && !d->readDone)
return true; // Will happen if we have been asked for the size
bool isCompressed = false;