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

Unified Diff: components/bookmarks/browser/bookmark_storage.cc

Issue 373153002: Fixed use-after-free in LoadCallback in bookmark_storage.cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | « components/bookmarks/browser/bookmark_storage.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/bookmarks/browser/bookmark_storage.cc
diff --git a/components/bookmarks/browser/bookmark_storage.cc b/components/bookmarks/browser/bookmark_storage.cc
index f2f1f1bc588801387823b30692d5582b82e21c7f..50e066920be9f80122b59500ead61e71d4c75aaf 100644
--- a/components/bookmarks/browser/bookmark_storage.cc
+++ b/components/bookmarks/browser/bookmark_storage.cc
@@ -49,7 +49,7 @@ void AddBookmarksToIndex(BookmarkLoadDetails* details,
void LoadCallback(const base::FilePath& path,
const base::WeakPtr<BookmarkStorage>& storage,
- BookmarkLoadDetails* details,
+ scoped_ptr<BookmarkLoadDetails> details,
base::SequencedTaskRunner* task_runner) {
startup_metric_utils::ScopedSlowStartupUMA
scoped_timer("Startup.SlowStartupBookmarksLoad");
@@ -96,17 +96,18 @@ void LoadCallback(const base::FilePath& path,
if (load_index) {
TimeTicks start_time = TimeTicks::Now();
- AddBookmarksToIndex(details, details->bb_node());
- AddBookmarksToIndex(details, details->other_folder_node());
- AddBookmarksToIndex(details, details->mobile_folder_node());
+ AddBookmarksToIndex(details.get(), details->bb_node());
+ AddBookmarksToIndex(details.get(), details->other_folder_node());
+ AddBookmarksToIndex(details.get(), details->mobile_folder_node());
for (size_t i = 0; i < extra_nodes.size(); ++i)
- AddBookmarksToIndex(details, extra_nodes[i]);
+ AddBookmarksToIndex(details.get(), extra_nodes[i]);
UMA_HISTOGRAM_TIMES("Bookmarks.CreateBookmarkIndexTime",
TimeTicks::Now() - start_time);
}
task_runner->PostTask(FROM_HERE,
- base::Bind(&BookmarkStorage::OnLoadFinished, storage));
+ base::Bind(&BookmarkStorage::OnLoadFinished, storage,
+ base::Passed(&details)));
}
} // namespace
@@ -162,14 +163,11 @@ BookmarkStorage::~BookmarkStorage() {
void BookmarkStorage::LoadBookmarks(
scoped_ptr<BookmarkLoadDetails> details,
const scoped_refptr<base::SequencedTaskRunner>& task_runner) {
- DCHECK(!details_.get());
- DCHECK(details);
- details_ = details.Pass();
sequenced_task_runner_->PostTask(FROM_HERE,
base::Bind(&LoadCallback,
writer_.path(),
weak_factory_.GetWeakPtr(),
- details_.get(),
+ base::Passed(&details),
task_runner));
}
@@ -193,11 +191,11 @@ bool BookmarkStorage::SerializeData(std::string* output) {
return serializer.Serialize(*(value.get()));
}
-void BookmarkStorage::OnLoadFinished() {
+void BookmarkStorage::OnLoadFinished(scoped_ptr<BookmarkLoadDetails> details) {
if (!model_)
return;
- model_->DoneLoading(details_.Pass());
+ model_->DoneLoading(details.Pass());
}
bool BookmarkStorage::SaveNow() {
« no previous file with comments | « components/bookmarks/browser/bookmark_storage.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698