From b2b9fdfda0f7838059d7e826d81740977ef35a6e Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 15 Sep 2014 16:23:02 +0200 Subject: QSizeGrip: use a QPointer to the tracked TLW And not a normal pointer. The problem is that in certain scenarios, if the TLW containing a QSizeGrip changes and the old TLW gets immediately destroyed, then the mechanism which updates the tracked TLW is run too late, and ends up accessing a dangling pointer. Therefore, we need to protect that pointer via a smart pointer. Task-number: QTBUG-22867 Change-Id: Icfb051132bacde604f660ac7a98bc0a9d1022c68 Reviewed-by: Marc Mutz --- .../widgets/widgets/qsizegrip/tst_qsizegrip.cpp | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'tests/auto/widgets') diff --git a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp index f88cd634de..2600348998 100644 --- a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp +++ b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp @@ -46,6 +46,10 @@ #include #include #include +#include +#include +#include +#include static inline Qt::Corner sizeGripCorner(QWidget *parent, QSizeGrip *sizeGrip) { @@ -75,6 +79,7 @@ private slots: void hideAndShowOnWindowStateChange_data(); void hideAndShowOnWindowStateChange(); void orientation(); + void dontCrashOnTLWChange(); private: QLineEdit *dummyWidget; @@ -191,6 +196,26 @@ void tst_QSizeGrip::orientation() QCOMPARE(sizeGripCorner(&widget, sizeGrip), Qt::TopRightCorner); } +void tst_QSizeGrip::dontCrashOnTLWChange() +{ + // QTBUG-22867 + QMdiArea mdiArea; + mdiArea.show(); + + QMainWindow *mw = new QMainWindow(); + QMdiSubWindow *mdi = mdiArea.addSubWindow(mw); + mw->statusBar()->setSizeGripEnabled(true); + mdiArea.removeSubWindow(mw); + delete mdi; + mw->show(); + + // the above setup causes a change of TLW for the size grip, + // and it must not crash. + + QVERIFY(QTest::qWaitForWindowExposed(&mdiArea)); + QVERIFY(QTest::qWaitForWindowExposed(mw)); +} + QTEST_MAIN(tst_QSizeGrip) #include "tst_qsizegrip.moc" -- cgit v1.2.3