From a3ce0eb6f19578bbc5b95602ebd731fbb80fec26 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Wed, 18 May 2011 18:20:38 +0200 Subject: [PATCH] When asking for relations, don't crash on children that don't return an interface. Reviewed-by: Jan-Arve (cherry picked from commit a816cb0d26ebcef54e9e61c72455509edf6c44b9) Change-Id: I8fed57eb0dfd5b67dee440b19c0ad5b9d7b3ae2d Reviewed-on: http://codereview.qt.nokia.com/3020 Reviewed-by: Qt Sanity Bot Reviewed-by: Frederik Gladhorn --- src/gui/accessible/qaccessiblewidget.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/accessible/qaccessiblewidget.cpp b/src/gui/accessible/qaccessiblewidget.cpp index 60ed48f76b..6a7d7e97cc 100644 --- a/src/gui/accessible/qaccessiblewidget.cpp +++ b/src/gui/accessible/qaccessiblewidget.cpp @@ -704,13 +704,16 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, int sibCount = pIface->childCount(); QAccessibleInterface *candidate = 0; for (int i = 0; i < sibCount && entry; ++i) { - pIface->navigate(Child, i+1, &candidate); - Q_ASSERT(candidate); - if (candidate->relationTo(0, this, 0) & Label) + const int childId = pIface->navigate(Child, i+1, &candidate); + Q_ASSERT(childId >= 0); + if (childId > 0) + candidate = pIface; + if (candidate->relationTo(childId, this, 0) & Label) --entry; if (!entry) break; - delete candidate; + if (candidate != pIface) + delete candidate; candidate = 0; } if (!candidate) {