summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
authorTeemu Katajisto <teemu.katajisto@digia.com>2012-10-05 13:48:43 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-08 08:51:09 +0200
commit179437bdbad3fa2f27ea7fc3a4284a844cb30792 (patch)
treea8327fcb729903f8c0de292bb2f769f3cf1b4a05 /src/plugins/platforms/cocoa
parent1bd710cbc77f71451527b9436c2d8935d8526bd5 (diff)
Cocoa: add qWarnining when trying to create 0 width/height CGImages
Add meaningful warnings when trying to create 0 width/height CGImages. This way it is easier to track down the place where valid size is not used. Change-Id: Id261ddf72d5487afcdb1a2a6d0d9079700888545 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.mm6
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm12
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac.mm3
3 files changed, 18 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm
index d950878c28..8841a65844 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.mm
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm
@@ -79,6 +79,12 @@ static void drawImageReleaseData (void *info, const void *, size_t)
CGImageRef qt_mac_image_to_cgimage(const QImage &img)
{
+ if (img.width() <= 0 || img.height() <= 0) {
+ qWarning() << Q_FUNC_INFO <<
+ "trying to set" << img.width() << "x" << img.height() << "size for CGImage";
+ return 0;
+ }
+
QImage *image;
if (img.depth() != 32)
image = new QImage(img.convertToFormat(QImage::Format_ARGB32_Premultiplied));
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 33527624df..a95ff45f30 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -192,12 +192,20 @@ static QTouchDevice *touchDevice = 0;
{
CGImageRelease(m_cgImage);
+ int width = image->width();
+ int height = image->height();
+
+ if (width <= 0 || height <= 0) {
+ qWarning() << Q_FUNC_INFO <<
+ "setting invalid size" << width << "x" << height << "for qnsview image";
+ m_cgImage = 0;
+ return;
+ }
+
const uchar *imageData = image->bits();
int bitDepth = image->depth();
int colorBufferSize = 8;
int bytesPrLine = image->bytesPerLine();
- int width = image->width();
- int height = image->height();
CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB();
diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
index e6877e68d3..8c47527648 100644
--- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
@@ -1022,7 +1022,8 @@ void QCoreGraphicsPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, co
image = qt_mac_create_imagemask(pm, sr);
} else if (differentSize) {
QCFType<CGImageRef> img = qt_mac_image_to_cgimage(pm.toImage());
- image = CGImageCreateWithImageInRect(img, CGRectMake(qRound(sr.x()), qRound(sr.y()), qRound(sr.width()), qRound(sr.height())));
+ if (img)
+ image = CGImageCreateWithImageInRect(img, CGRectMake(qRound(sr.x()), qRound(sr.y()), qRound(sr.width()), qRound(sr.height())));
} else {
image = qt_mac_image_to_cgimage(pm.toImage());
}