Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: ui/accessibility/ax_tree.cc

Issue 2377443002: Fix another bug in AXTree caught by libfuzzer (Closed)
Patch Set: Address feedback Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/accessibility/ax_tree_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/accessibility/ax_tree.cc
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index ddf04d01ad9f31884a474fbffec1e70120044301..0ba6220475e8cfa3fc255f2776f0896949b0fa2a 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -243,12 +243,19 @@ bool AXTree::UpdateNode(const AXNodeData& src,
// First, delete nodes that used to be children of this node but aren't
// anymore.
if (!DeleteOldChildren(node, src.child_ids, update_state)) {
+ // If DeleteOldChildren failed, we need to carefully clean up before
+ // returning false as well. In particular, if this node was a new root,
+ // we need to safely destroy the whole tree.
if (update_state->new_root) {
AXNode* old_root = root_;
root_ = nullptr;
DestroySubtree(old_root, update_state);
- if (node != old_root &&
+
+ // Delete |node|'s subtree too as long as it wasn't already removed
+ // or added elsewhere in the tree.
+ if (update_state->removed_node_ids.find(src.id) ==
+ update_state->removed_node_ids.end() &&
update_state->new_nodes.find(node) != update_state->new_nodes.end()) {
DestroySubtree(node, update_state);
}
« no previous file with comments | « no previous file | ui/accessibility/ax_tree_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698