Details
-
Bug
-
Resolution: Out of scope
-
P1: Critical
-
None
-
4.8.5
-
None
Description
This worked well in 4.8.4, but I guess is broken (or revealed) after fixing QTBUG-26187. Application simply crashes during work and the stack dump looks this way:
Crash reason: EXCEPTION_ACCESS_VIOLATION_WRITE Crash address: 0x20 Thread 0 (crashed) 0 QtCore4.dll!QMetaObject::changeGuard(QObject * *,QObject *) + 0x1e4 rbx = 0x00000077d65aeaa0 r12 = 0x00000000000406e2 r13 = 0x00000077dc407d20 r14 = 0x0000000000000000 r15 = 0x0000000000000001 rip = 0x0000000073015444 rsp = 0x00000077d63caf20 rbp = 0x00000077dc407d00 Found by: given as instruction pointer in context 1 QtGui4.dll!qMakePair<QPointer<QObject>,int>(QPointer<QObject> const &,int const &) + 0x23 rip = 0x0000000071b525c4 rsp = 0x00000077d63caf70 rbp = 0x00000077dc407d00 Found by: stack scanning 2 QtGui4.dll!QAccessible::updateAccessibility(QObject *,int,QAccessible::Event) + 0x510 rip = 0x0000000071b4f401 rsp = 0x00000077d63cafb0 rbp = 0x00000077dc407d00 Found by: stack scanning
That qMakePair call seems use the QPointer<QObject> introduced in QTBUG-26187 fix, and it seems it is now NULL in some cases, so it crashes.
I hardly can provide a small sample that reproduces the crash, only the full application, but I believe this can be fixed by simply adding an "if" operator somewhere in QAccessible::updateAccessibility, probably just before this line:
qAccessibleRecentSentEvents()->insert(eventId, qMakePair(QPointer<QObject>(o), who));