From 0bfb420574f192a097c7ab3dbdd452b39464dc84 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 10 Oct 2023 11:41:41 +0200 Subject: [PATCH] Make sure we don't load invalid SVGs twice 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 Pick-to: 6.5 Change-Id: Ibef7f54627c76414c66f81804f5f46f2db3594ba Reviewed-by: Eirik Aavitsland Reviewed-by: Qt CI Bot (cherry picked from commit a090bd1f9a7bfa14f06b14570c6a5a37843931c6) Reviewed-by: Qt Cherry-pick Bot --- 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 @@ { 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 @@ QRect clipRect; QSize scaledSize; QRect scaledClipRect; - bool loaded; + bool loadAttempted; + bool loadStatus; bool readDone; QColor backColor; }; @@ -39,8 +40,9 @@ 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 @@ if (res) { defaultSize = r.defaultSize(); - loaded = true; + loadStatus = true; } - return loaded; + return loadStatus; } @@ -105,7 +107,7 @@ { 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;