diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2018-05-14 14:15:04 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2018-05-22 13:15:31 +0000 |
commit | 91b21e155cea14449757abdb51c619957975bbe1 (patch) | |
tree | d9228aec3dfb76f71615d3829cafe8fd03ef83c4 | |
parent | d2c7fd5b196ba8ccdcbbc6da77e74eab7153bf63 (diff) | |
download | qtsvg-91b21e155cea14449757abdb51c619957975bbe1.tar.gz |
SVG image handler: catch and warn about QImage allocation failure
QImage allocation failure, typically because of out-of-range
dimensions, was not immediately caught and reported. This could lead
confusing error messages as QPainter would render on a null image.
Task-number: QTBUG-68229
Change-Id: If99033244728f1cea635691c6a93564976962f09
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r-- | src/plugins/imageformats/svg/qsvgiohandler.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/plugins/imageformats/svg/qsvgiohandler.cpp b/src/plugins/imageformats/svg/qsvgiohandler.cpp index 457c79e..a999d47 100644 --- a/src/plugins/imageformats/svg/qsvgiohandler.cpp +++ b/src/plugins/imageformats/svg/qsvgiohandler.cpp @@ -176,8 +176,13 @@ bool QSvgIOHandler::read(QImage *image) t.translate(tr1.x(), tr1.y()); bounds = t.mapRect(bounds); } - if (image->size() != finalSize || !image->reinterpretAsFormat(QImage::Format_ARGB32_Premultiplied)) + if (image->size() != finalSize || !image->reinterpretAsFormat(QImage::Format_ARGB32_Premultiplied)) { *image = QImage(finalSize, QImage::Format_ARGB32_Premultiplied); + if (!finalSize.isEmpty() && image->isNull()) { + qWarning("QSvgIOHandler: QImage allocation failed (size %i x %i)", finalSize.width(), finalSize.height()); + return false; + } + } if (!finalSize.isEmpty()) { image->fill(d->backColor.rgba()); QPainter p(image); |