aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorDaniel d'Andrada <daniel.dandrada@canonical.com>2016-06-08 14:42:03 -0300
committerAlbert Astals Cid <albert.astals@canonical.com>2016-06-21 14:31:09 +0000
commitb61c774ce58d15bfc26a2a75b55e3f5eefbcdcc2 (patch)
tree9e3afb29dc2e7d0c3e0eb8cf35ce2dd20f7d7183 /src/quick
parent5511ed66e654dbd0ce3c03c7bf22b201494bb82f (diff)
QQuickSpriteEngine: avoid entering infinite loop in assembledImage()
Do not allow a frame size larger than the image size, otherwise we would never leave "while (framesLeft > 0) {...}" as framesLeft is never decremented because "copied/frameWidth" in the expression "framesLeft -= copied/frameWidth;" always resolves to zero because copied < frameWidth. Task-number: QTBUG-53937 Change-Id: Ia777ec65d72562426b13533918efcaca5bcabdd7 Reviewed-by: Albert Astals Cid <albert.astals@canonical.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickspriteengine.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp
index 243feef683..864f632e7c 100644
--- a/src/quick/items/qquickspriteengine.cpp
+++ b/src/quick/items/qquickspriteengine.cpp
@@ -399,6 +399,15 @@ QImage QQuickSpriteEngine::assembledImage()
QImage img = state->m_pix.image();
+ {
+ const QSize frameSize(state->m_frameWidth, state->m_frameHeight);
+ if (!(img.size() - frameSize).isValid()) {
+ qmlInfo(state).nospace() << "SpriteEngine: Invalid frame size " << frameSize << "."
+ " It's bigger than image size " << img.size() << ".";
+ return QImage();
+ }
+ }
+
//Check that the frame sizes are the same within one sprite
if (!state->m_frameWidth)
state->m_frameWidth = img.width() / state->frames();