From 179437bdbad3fa2f27ea7fc3a4284a844cb30792 Mon Sep 17 00:00:00 2001 From: Teemu Katajisto Date: Fri, 5 Oct 2012 13:48:43 +0300 Subject: Cocoa: add qWarnining when trying to create 0 width/height CGImages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/plugins/platforms/cocoa/qcocoahelpers.mm | 6 ++++++ src/plugins/platforms/cocoa/qnsview.mm | 12 ++++++++++-- src/plugins/platforms/cocoa/qpaintengine_mac.mm | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src/plugins/platforms/cocoa') 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 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()); } -- cgit v1.2.3