From fe52d1853ed48d7092c6835b1ce14eb7f21fe7f5 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 21 Mar 2013 22:56:23 +0100 Subject: Accessibility: Fix crash in windowHelper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When accessing the parent, we cannot be sure that the parent interfaces are all valid. Invalid parents can happen during destruction. Another cause is unusual hierarchies, the QAbstractItemView::columnDelegate test triggers a situation where this used to crash. In addition to the actual problem, add checks for every parent() call. Change-Id: I70b2bf7bc3c02b0f33e22b81023fd24519adeba9 Reviewed-by: Jan Arve Sæther --- src/plugins/platforms/windows/accessible/iaccessible2.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/plugins/platforms/windows/accessible/iaccessible2.cpp') diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp index fb08daa38e..44e715d0ce 100644 --- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp +++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp @@ -645,7 +645,8 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_locationInParent(long *x, l QPoint topLeft = accessible->rect().topLeft(); - if (QAccessibleInterface *parentIface = accessible->parent()) + QAccessibleInterface *parentIface = accessible->parent(); + if (parentIface && parentIface->isValid()) topLeft -= parentIface->rect().topLeft(); *x = topLeft.x(); @@ -1596,7 +1597,7 @@ uint QWindowsIA2Accessible::uniqueID() const if (!uid) { QAccessibleInterface *acc = accessible; QVector indexOfNodes; - while (acc && !acc->object()) { + while (acc && acc->isValid() && !acc->object()) { QAccessibleInterface *par = acc->parent(); indexOfNodes.append(par->indexOfChild(acc)); if (acc != accessible) -- cgit v1.2.3