summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/accessible/iaccessible2.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-03-21 22:56:23 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-23 11:48:33 +0100
commitfe52d1853ed48d7092c6835b1ce14eb7f21fe7f5 (patch)
tree60b30c0786363fa91f45eaf483ad34f9e8ed041c /src/plugins/platforms/windows/accessible/iaccessible2.cpp
parent6d9541ae96441d849e87d763a636b8f36b416764 (diff)
Accessibility: Fix crash in windowHelper
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 <jan-arve.saether@digia.com>
Diffstat (limited to 'src/plugins/platforms/windows/accessible/iaccessible2.cpp')
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp5
1 files changed, 3 insertions, 2 deletions
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<int> indexOfNodes;
- while (acc && !acc->object()) {
+ while (acc && acc->isValid() && !acc->object()) {
QAccessibleInterface *par = acc->parent();
indexOfNodes.append(par->indexOfChild(acc));
if (acc != accessible)