diff options
author | Morten Johan Sørvig <morten.sorvig@theqtcompany.com> | 2015-08-18 11:39:01 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@theqtcompany.com> | 2015-09-02 07:28:18 +0000 |
commit | 111ee58c065602bfcde520b54f44809d854e73f0 (patch) | |
tree | fdf5c0875247708e964d67f6fcbc0f70084cbe68 /src | |
parent | 6f9e845d9b02ed2becaab4af837535173dad2068 (diff) |
Prevent QGestureManager crash.
Use QPointer to prevent dereferencing stale pointers
stored in m_gestureTargets.
Add null pointer tests in addition to the Q_ASSERTs
on the pointers returned by m_gestureTargets.value().
The intention is to assert in debug mode but keep
going in release mode.
Change-Id: Icdef8cc02040bddc88f4bcb268e9ca0ac252557d
Task-number: QTBUG-46264
Reviewed-by: Pawel Kurdybacha <pawel.kurdybacha@gmail.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/kernel/qgesturemanager.cpp | 5 | ||||
-rw-r--r-- | src/widgets/kernel/qgesturemanager_p.h | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index b5d3a56d3f..8b918a72a2 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -405,6 +405,8 @@ void QGestureManager::cancelGesturesForChildren(QGesture *original) Q_ASSERT(original); QWidget *originatingWidget = m_gestureTargets.value(original); Q_ASSERT(originatingWidget); + if (!originatingWidget) + return; // iterate over all active gestures and all maybe gestures // for each find the owner @@ -565,7 +567,8 @@ void QGestureManager::getGestureTargets(const QSet<QGesture*> &gestures, foreach (QGesture *gesture, gestures) { QWidget *receiver = m_gestureTargets.value(gesture, 0); Q_ASSERT(receiver); - gestureByTypes[gesture->gestureType()].insert(receiver, gesture); + if (receiver) + gestureByTypes[gesture->gestureType()].insert(receiver, gesture); } // for each gesture type diff --git a/src/widgets/kernel/qgesturemanager_p.h b/src/widgets/kernel/qgesturemanager_p.h index 8ba253d17e..4e349ac731 100644 --- a/src/widgets/kernel/qgesturemanager_p.h +++ b/src/widgets/kernel/qgesturemanager_p.h @@ -117,7 +117,7 @@ private: QHash<QGesture *, QGestureRecognizer *> m_gestureToRecognizer; QHash<QGesture *, QObject *> m_gestureOwners; - QHash<QGesture *, QWidget *> m_gestureTargets; + QHash<QGesture *, QPointer<QWidget> > m_gestureTargets; int m_lastCustomGestureId; |