qt5base-lts/tests/auto
Marc Mutz afe5bcdbd1 tst_QWidget: Fix UB (invalid member access) in EnterTestMainDialog::eventFilter()
Found by UBSan:

  tst_qwidget.cpp:10207:29: runtime error: member access within address 0x6060000e8880 which does not point to an object of type 'EnterTestModalDialog'
  0x6060000e8880: note: object is of type 'QWidget'
   eb 00 80 45  10 4b 32 ab 11 2b 00 00  80 df 08 00 60 61 00 00  c0 4c 32 ab 11 2b 00 00  00 00 be be
                ^~~~~~~~~~~~~~~~~~~~~~~
                vptr for 'QWidget'
    #0 0x6ca13f in EnterTestMainDialog::eventFilter(QObject*, QEvent*) tst_qwidget.cpp:10207
    #1 0x2b11b8bc90c3 in QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject*, QEvent*) qcoreapplication.cpp:1081
    #2 0x2b11a3c49b4a in QApplicationPrivate::notify_helper(QObject*, QEvent*) qapplication.cpp:3716
    #3 0x2b11a3c8ec72 in QApplication::notify(QObject*, QEvent*) qapplication.cpp:3704
    #4 0x2b11b8bccd0f in QCoreApplication::notifyInternal2(QObject*, QEvent*) qcoreapplication.cpp:988
    #5 0x2b11aea5c34d in QCoreApplication::sendEvent(QObject*, QEvent*) qcoreapplication.h:231
    #6 0x2b11aea5c34d in QGuiApplicationPrivate::_q_updateFocusObject(QObject*) qguiapplication.cpp:3690
    #7 0x2b11aea61360 in QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) .moc/moc_qguiapplication.cpp:177
    #8 0x2b11b8d1dc86 in QMetaObject::activate(QObject*, int, int, void**) qobject.cpp:3787
    #9 0x2b11aea784a3 in QWindow::focusObjectChanged(QObject*) .moc/moc_qwindow.cpp:760
    #10 0x2b11a3fb24f2 in QWidget::clearFocus() qwidget.cpp:6705
    #11 0x2b11a3fc87b1 in QWidget::~QWidget() qwidget.cpp:1608
    #12 0x2b11a526688c in QDialog::~QDialog() qdialog.cpp:352
    #13 0x6c43e2 in EnterTestModalDialog::~EnterTestModalDialog() tst_qwidget.cpp:10160
    #14 0x6c43e2 in EnterTestModalDialog::~EnterTestModalDialog() tst_qwidget.cpp:10160
    #15 0x492be3 in EnterTestMainDialog::buttonPressed() tst_qwidget.cpp:10188
    #16 0x492be3 in EnterTestMainDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) .moc/tst_qwidget.moc:2056
    #17 0x2b11b8d1dc86 in QMetaObject::activate(QObject*, int, int, void**) qobject.cpp:3787
    #18 0x2b11a45cb833 in QAbstractButton::clicked(bool) .moc/moc_qabstractbutton.cpp:307
    #19 0x2b11a45cd54b in QAbstractButtonPrivate::emitClicked() qabstractbutton.cpp:411
    #20 0x2b11a45df73a in QAbstractButtonPrivate::click() qabstractbutton.cpp:404
    [...]
    #41 0x6bb2cf in tst_QWidget::taskQTBUG_27643_enterEvents() tst_qwidget.cpp:10249
    [...]

Fix by checking the event type first, and accessing
modal->button only if it's QEvent::Enter.

Change-Id: I2c7df3a1f43ecbfe14741b5861729078a91a32d6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2016-10-12 08:16:45 +00:00
..
android Fix typo in test results report for android 2015-07-28 21:16:19 +00:00
bic/data Data files for binary compatibility tests updated for Qt 5.6 2016-09-30 10:55:59 +00:00
cmake Enable cmake auto tests for -no-gui 2016-03-30 07:16:50 +00:00
compilerwarnings/data Fixed license headers 2015-02-17 18:46:09 +00:00
concurrent Fix problem with exception reporting in QFuture::waitForResult() 2016-08-23 14:55:49 +00:00
corelib QObject test: check that throwing from a child's constructor works 2016-09-26 04:47:06 +00:00
dbus Fix race condition in tst_QDBusConnection::pendingCallWhenDisconnected 2016-06-06 11:39:53 +00:00
gui QPixmap::load: ensure QBitmap stays a QBitmap even on failure 2016-10-06 16:39:13 +00:00
guiapplauncher Fix path to examples part of tst_GuiAppLauncher 2015-02-13 07:28:15 +00:00
installed_cmake Add a unit test for testing Qt in its install location. 2013-07-02 23:08:54 +02:00
network Fix some typos and minor sentence structure issues in docs 2016-10-05 15:00:24 +00:00
opengl Merge remote-tracking branch 'origin/5.6.1' into 5.6 2016-06-02 06:01:25 +02:00
other Extend tested formats in lancelot 2016-09-27 17:26:03 +00:00
printsupport QMacPrintEngine: Really set the printer resolution 2016-02-25 18:42:47 +00:00
shared Update copyright headers 2015-02-11 06:49:51 +00:00
sql Never return char variants when reading prepared MySQL statements 2016-09-12 12:47:08 +00:00
testlib Major re-write of generate_expected_output.py 2016-08-29 18:02:35 +00:00
tools uic: generate translate calls with Q_NULLPTR instead of 0 2016-09-03 05:07:50 +00:00
widgets tst_QWidget: Fix UB (invalid member access) in EnterTestMainDialog::eventFilter() 2016-10-12 08:16:45 +00:00
xml Plug leaks in tst_QXmlSimpleReader 2016-10-10 17:17:28 +00:00
auto.pro Enable cmake auto tests for -no-gui 2016-03-30 07:16:50 +00:00
network-settings.h tst_QTcpSocket, tst_QUdpSocket: Improve diagnostics. 2016-05-02 19:20:33 +00:00
qtest-config.h Update copyright headers 2015-02-11 06:49:51 +00:00
test.pl Update copyright headers 2015-02-11 06:49:51 +00:00