diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-08 05:07:27 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-08 05:07:27 +0000 |
commit | e82a28a6c080a286e5fa4ed89540af7f3ba8d3b0 (patch) | |
tree | a198f523d4bc19d55d37db779bc7dad580b9f234 /base/observer_list_unittest.cc | |
parent | ca1509006f8898979ca3ed268f9df6fefd121340 (diff) | |
download | chromium_src-e82a28a6c080a286e5fa4ed89540af7f3ba8d3b0.zip chromium_src-e82a28a6c080a286e5fa4ed89540af7f3ba8d3b0.tar.gz chromium_src-e82a28a6c080a286e5fa4ed89540af7f3ba8d3b0.tar.bz2 |
Revert 88151 (see crbug.com/85296) - Fix user-after-free error with ObserverList. The problem is that if an ObserverListBase::Iterator is on the stack and one of the observers deletes the object holding the list, Iterator's destructor will use the deleted list.
BUG=84919
Review URL: http://codereview.chromium.org/7127001
TBR=jam@chromium.org
Review URL: http://codereview.chromium.org/7134008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88284 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/observer_list_unittest.cc')
-rw-r--r-- | base/observer_list_unittest.cc | 23 |
1 files changed, 0 insertions, 23 deletions
diff --git a/base/observer_list_unittest.cc b/base/observer_list_unittest.cc index d0d2001..8315a2b 100644 --- a/base/observer_list_unittest.cc +++ b/base/observer_list_unittest.cc @@ -422,27 +422,4 @@ TEST(ObserverListTest, ClearNotifyExistingOnly) { << "Adder should not observe, so sum should still be 0."; } -class ListDestructor : public Foo { - public: - explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {} - virtual void Observe(int x) { - delete list_; - } - virtual ~ListDestructor() { } - int total; - private: - ObserverList<Foo>* list_; -}; - - -TEST(ObserverListTest, IteratorOutlivesList) { - ObserverList<Foo>* observer_list = new ObserverList<Foo>; - ListDestructor a(observer_list); - observer_list->AddObserver(&a); - - FOR_EACH_OBSERVER(Foo, *observer_list, Observe(0)); - // If this test fails, there'll be Valgrind errors when this function goes out - // of scope. -} - } // namespace |