fixes looping in navigation when accessibility tree is inconsistent (missing parent)
authorLukasz Oleksak <l.oleksak@samsung.com>
Tue, 4 Aug 2015 13:02:31 +0000 (15:02 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Tue, 4 Aug 2015 13:11:40 +0000 (15:11 +0200)
Change-Id: Ib12393a9673e8f5523899468b8a9f3cb39a4ecad
Signed-off-by: Lukasz Oleksak <l.oleksak@samsung.com>
src/flat_navi.c

index dcca42d..3778254 100644 (file)
@@ -476,7 +476,7 @@ AtspiAccessible * _directional_depth_first_search(AtspiAccessible *root, AtspiAc
          g_object_unref(next_related_in_direction);
       }
 
-   while (1)
+   while (node)
       {
          AtspiAccessible *prev_related_in_direction = (next_sibling_idx_modifier > 0)
                ? _get_object_in_relation(node, ATSPI_RELATION_FLOWS_FROM)
@@ -525,9 +525,9 @@ AtspiAccessible * _directional_depth_first_search(AtspiAccessible *root, AtspiAc
                      while (!_has_next_sibling(node, next_sibling_idx_modifier) || node==root) // no next sibling
                         {
                            DEBUG("DFS NO SIBLING");
-                           if (node == root)
+                           if (!node || node == root)
                               {
-                                 DEBUG("DFS ROOT")
+                                 DEBUG("DFS END");
                                  g_object_unref(node);
                                  return NULL;
                               }
@@ -542,6 +542,8 @@ AtspiAccessible * _directional_depth_first_search(AtspiAccessible *root, AtspiAc
                   }
             }
       }
+      DEBUG("DFS END");
+      return NULL;
 }
 
 AtspiAccessible *_first(FlatNaviContext *ctx)