Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
4.7.0
-
None
-
Mac OS X 10.6.4 Build 10F569
Qt 4.7.0
Description
This issue appears on Qt (Carbon&Cocoa) for Mac OS X, when the widget being scrolled with Mac Multi-touch TrackPad is deleted in the installed eventFilter() method.
Steps to reproduce:
+ Create a monitored QWidget.
+ Install an eventFilter() on this monitored widget.
In the eventFilter(), delete the monitored widget, upon receiving QWheelEvent. (Return true, according to Qt event processing rules)
+ Scroll the monitored widget by using Mac Multi-touch TrackPad. (Scroll in both directions: vertical & horizontal)
- Qt may crash upon delivery of QWheelEvent to a deleted object.
Probable reason:
Qt doesn't check if the target widget exists upon delivery of the second (Qt::Vertical) QWheelEvent.
See: /src/gui/kernel/qapplication_mac.mm:2173 for Carbon implementation of QWheelEvent delivery.
+ The check for the existence of a target widget is performed at qapplication_mac.mm:2173 ------ if(widget) {
+ The delivery of the first (Qt::Horizontal) QWheelEvent is performed at qapplication_mac.mm:2187 ------ QApplication::sendSpontaneousEvent(widget, &qwe);
- the widget can be deleted upon filtering the first (Qt::Horizontal) QWheelEvent.
+ The delivery of the second (Qt::Vertical) QWheelEvent is performed at qapplication_mac.mm:2198 ------ QApplication::sendSpontaneousEvent(widget, &qwe);
without any additional check of the widget existence.
See /src/gui/kernel/qcocoaview_mac.mm:901 for Cocoa implementation of QWheelEvent delivery.
- (void)scrollWheel:(NSEvent *)theEvent implementation seems to have a similar problem.
See attachments:
1. QtEventDispatchingTest.cpp - Test sample for reproducing this issue. Usage:
+ Launch the sample.
+ Put the input focus into the "Monitored widget".
+ Scroll this widget with Mac Multi-touch TrackPad in both direction (Horz & Vert.)
- The Test sample will crash.
2. CrashReport_Carbon.html - Crash report of the Test sample, which was built against Carbon Qt
3. CrashReport_Cocoa.html - Crash report of the Test sample, which was built against Cocoa Qt