summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-12 23:11:51 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-12 23:11:51 +0000
commitae9340b0a6fab4fb69896c95400f1095d1184cea (patch)
tree308b67f4c1aab0de2acdde3bfca6c1181cf1499d
parent8d7f40abdc12186dab03800d65816db57c06533e (diff)
downloadchromium_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.cc5
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);