diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2017-02-24 11:27:21 +0100 |
---|---|---|
committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2017-02-27 18:25:00 +0000 |
commit | 740b5c1fea56d1ec7b227b25e58a64355a8963f9 (patch) | |
tree | 97a050fc21ecb6c3bad514e5412909877718afd1 /src/widgets/widgets | |
parent | 44af54419eaceb27bb729717d6363917fd6bb819 (diff) |
Fix UB in QWidgetResizeHandler::eventFilter
Unconditional cast to a QMouseEvent while the event might also be a
QKeyEvent.
Change-Id: If5eb6fbad6e4440c167ff95298f51efde1834217
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qwidgetresizehandler.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index 016598849b..dc7353a6ca 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -112,9 +112,9 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) return false; } - QMouseEvent *e = (QMouseEvent*)ee; - switch (e->type()) { + switch (ee->type()) { case QEvent::MouseButtonPress: { + QMouseEvent *e = static_cast<QMouseEvent *>(ee); if (w->isMaximized()) break; if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos()))) @@ -155,7 +155,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) case QEvent::MouseButtonRelease: if (w->isMaximized()) break; - if (e->button() == Qt::LeftButton) { + if (static_cast<QMouseEvent *>(ee)->button() == Qt::LeftButton) { moveResizeMode = false; buttonDown = false; widget->releaseMouse(); @@ -171,6 +171,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) case QEvent::MouseMove: { if (w->isMaximized()) break; + QMouseEvent *e = static_cast<QMouseEvent *>(ee); buttonDown = buttonDown && (e->buttons() & Qt::LeftButton); // safety, state machine broken! bool me = movingEnabled; movingEnabled = (me && o == widget && (buttonDown || moveResizeMode)); @@ -184,11 +185,11 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) } } break; case QEvent::KeyPress: - keyPressEvent((QKeyEvent*)e); + keyPressEvent(static_cast<QKeyEvent *>(ee)); break; case QEvent::ShortcutOverride: if (buttonDown) { - ((QKeyEvent*)ee)->accept(); + ee->accept(); return true; } break; |