From 111ee58c065602bfcde520b54f44809d854e73f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Tue, 18 Aug 2015 11:39:01 +0200 Subject: 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 Reviewed-by: Gabriel de Dietrich --- src/widgets/kernel/qgesturemanager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/widgets/kernel/qgesturemanager.cpp') 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 &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 -- cgit v1.2.3