From 7f782e1fc41ff7694f9bf7434d5a4db0545c0413 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Thu, 5 Apr 2018 13:02:35 +0200 Subject: [PATCH] Fix crash if QPixmap::defaultDepth() is called when no QGuiApplication This static method can be called before QGuiApplication is created. At that point there is yet no primary screen, so the implementation needs to guard against dereferencing a nullptr. Task-number: QTBUG-67309 Change-Id: I6b7b9e97b1c3c79bf2f9c6d6247c3b10f39f7a55 Reviewed-by: Friedemann Kleint --- src/gui/image/qpixmap.cpp | 8 +++++++- .../gui/kernel/qguiapplication/tst_qguiapplication.cpp | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 5b3e3985a7..1ea503a268 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1467,12 +1467,18 @@ QBitmap QPixmap::mask() const On all platforms the depth of the primary screen will be returned. + \note QGuiApplication must be created before calling this function. + \sa depth(), QColormap::depth(), {QPixmap#Pixmap Information}{Pixmap Information} */ int QPixmap::defaultDepth() { - return QGuiApplication::primaryScreen()->depth(); + QScreen *primary = QGuiApplication::primaryScreen(); + if (Q_LIKELY(primary)) + return primary->depth(); + qWarning("QPixmap: QGuiApplication must be created before calling defaultDepth()."); + return 0; } /*! diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index b5a69d920a..fc011d726d 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -1099,6 +1099,8 @@ void tst_QGuiApplication::staticFunctions() QGuiApplication::setQuitOnLastWindowClosed(true); QGuiApplication::quitOnLastWindowClosed(); QGuiApplication::applicationState(); + + QPixmap::defaultDepth(); } void tst_QGuiApplication::settableStyleHints_data()