From 4fe0e5dbc4f797ae7b7a9569dc90424884b89f0b Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 31 Jul 2024 16:22:01 +0200 Subject: [PATCH] Icon engines: don't paint on a null-pixmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the pixmap created is null (perhaps because the size is null), then don't paint into it. It might crash as we might end up with an invalid device context. Task-number: QTBUG-127085 Pick-to: 6.7 Change-Id: I03b3beabe02f150a2970013c15842369d3a27596 Reviewed-by: Tor Arne Vestbø (cherry picked from commit b2b4bc2f2fb5de53e262c88023f278f782b80de5) Reviewed-by: Qt Cherry-pick Bot --- src/gui/platform/darwin/qappleiconengine.mm | 8 +++++--- .../platforms/android/qandroidplatformiconengine.cpp | 6 ++++-- src/plugins/platforms/windows/qwindowsiconengine.cpp | 6 ++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/gui/platform/darwin/qappleiconengine.mm b/src/gui/platform/darwin/qappleiconengine.mm index 7e0ed184dca..4dd8e42124e 100644 --- a/src/gui/platform/darwin/qappleiconengine.mm +++ b/src/gui/platform/darwin/qappleiconengine.mm @@ -408,9 +408,11 @@ QPixmap QAppleIconEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QIco m_pixmap.setDevicePixelRatio(scale); m_pixmap.fill(Qt::transparent); - QPainter painter(&m_pixmap); - paint(&painter, QRect(paintOffset.width(), paintOffset.height(), - paintSize.width(), paintSize.height()), mode, state); + if (!m_pixmap.isNull()) { + QPainter painter(&m_pixmap); + paint(&painter, QRect(paintOffset.width(), paintOffset.height(), + paintSize.width(), paintSize.height()), mode, state); + } m_cacheKey = cacheKey; } diff --git a/src/plugins/platforms/android/qandroidplatformiconengine.cpp b/src/plugins/platforms/android/qandroidplatformiconengine.cpp index a88696886dd..ff96e8fc00d 100644 --- a/src/plugins/platforms/android/qandroidplatformiconengine.cpp +++ b/src/plugins/platforms/android/qandroidplatformiconengine.cpp @@ -572,8 +572,10 @@ QPixmap QAndroidPlatformIconEngine::scaledPixmap(const QSize &size, QIcon::Mode m_pixmap.fill(Qt::transparent); m_pixmap.setDevicePixelRatio(scale); - QPainter painter(&m_pixmap); - paint(&painter, QRect(QPoint(), size), mode, state); + if (!m_pixmap.isNull()) { + QPainter painter(&m_pixmap); + paint(&painter, QRect(QPoint(), size), mode, state); + } m_cacheKey = cacheKey; } diff --git a/src/plugins/platforms/windows/qwindowsiconengine.cpp b/src/plugins/platforms/windows/qwindowsiconengine.cpp index 5e5ca22ec18..95971fce952 100644 --- a/src/plugins/platforms/windows/qwindowsiconengine.cpp +++ b/src/plugins/platforms/windows/qwindowsiconengine.cpp @@ -353,8 +353,10 @@ QPixmap QWindowsIconEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QI m_pixmap.fill(Qt::transparent); m_pixmap.setDevicePixelRatio(scale); - QPainter painter(&m_pixmap); - paint(&painter, QRect(QPoint(), size), mode, state); + if (!m_pixmap.isNull()) { + QPainter painter(&m_pixmap); + paint(&painter, QRect(QPoint(), size), mode, state); + } m_cacheKey = cacheKey; }