summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2017-02-24 11:27:21 +0100
committerOlivier Goffart (Woboq GmbH) <ogoffart@woboq.com>2017-02-27 18:25:00 +0000
commit740b5c1fea56d1ec7b227b25e58a64355a8963f9 (patch)
tree97a050fc21ecb6c3bad514e5412909877718afd1 /src/widgets
parent44af54419eaceb27bb729717d6363917fd6bb819 (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')
-rw-r--r--src/widgets/widgets/qwidgetresizehandler.cpp11
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;