diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-12 23:11:51 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-12 23:11:51 +0000 |
commit | ae9340b0a6fab4fb69896c95400f1095d1184cea (patch) | |
tree | 308b67f4c1aab0de2acdde3bfca6c1181cf1499d | |
parent | 8d7f40abdc12186dab03800d65816db57c06533e (diff) | |
download | chromium_src-ae9340b0a6fab4fb69896c95400f1095d1184cea.zip chromium_src-ae9340b0a6fab4fb69896c95400f1095d1184cea.tar.gz chromium_src-ae9340b0a6fab4fb69896c95400f1095d1184cea.tar.bz2 |
Fixes possible crash in treeview. The code for removing a node was not
correctly updating internal data structures, which could lead to a
future crash. When recursively deleting items we need to get the next
item before removing from the tree, otherwise the tree returns null.
BUG=27290
TEST=make sure no problems in using bookmark manager, especially when
adding/removing urls/folders.
Review URL: http://codereview.chromium.org/384092
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31850 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | views/controls/tree/tree_view.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/views/controls/tree/tree_view.cc b/views/controls/tree/tree_view.cc index 957007c..f3888e6 100644 --- a/views/controls/tree/tree_view.cc +++ b/views/controls/tree/tree_view.cc @@ -602,9 +602,10 @@ void TreeView::RecursivelyDelete(NodeDetails* node) { DCHECK(item); // Recurse through children. - for (HTREEITEM child = TreeView_GetChild(tree_view_, item); - child ; child = TreeView_GetNextSibling(tree_view_, child)) { + for (HTREEITEM child = TreeView_GetChild(tree_view_, item); child ;) { + HTREEITEM next = TreeView_GetNextSibling(tree_view_, child); RecursivelyDelete(GetNodeDetailsByTreeItem(child)); + child = next; } TreeView_DeleteItem(tree_view_, item); |