diff options
author | alemate <alemate@chromium.org> | 2015-03-03 05:58:32 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-03 13:59:35 +0000 |
commit | ae10a9150af37a77ed8e9a71b19ad441d48f1cc7 (patch) | |
tree | 026d43e62f4815d5c95c048d440b89b9b22723b9 /chromeos/timezone | |
parent | 3edb4989f8f69c968c0df14cb1c26d21dd19bf1f (diff) | |
download | chromium_src-ae10a9150af37a77ed8e9a71b19ad441d48f1cc7.zip chromium_src-ae10a9150af37a77ed8e9a71b19ad441d48f1cc7.tar.gz chromium_src-ae10a9150af37a77ed8e9a71b19ad441d48f1cc7.tar.bz2 |
Fix crash in SimpleGeolocationProvider.
BUG=463150
TEST=manual
Review URL: https://codereview.chromium.org/973003002
Cr-Commit-Position: refs/heads/master@{#318866}
Diffstat (limited to 'chromeos/timezone')
-rw-r--r-- | chromeos/timezone/timezone_provider.cc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/chromeos/timezone/timezone_provider.cc b/chromeos/timezone/timezone_provider.cc index c9646c6..784a3b1 100644 --- a/chromeos/timezone/timezone_provider.cc +++ b/chromeos/timezone/timezone_provider.cc @@ -47,10 +47,13 @@ void TimeZoneProvider::OnTimezoneResponse( TimeZoneRequest::TimeZoneResponseCallback callback, scoped_ptr<TimeZoneResponseData> timezone, bool server_error) { - ScopedVector<TimeZoneRequest>::iterator new_end = - std::remove(requests_.begin(), requests_.end(), request); - DCHECK_EQ(std::distance(new_end, requests_.end()), 1); - requests_.erase(new_end, requests_.end()); + ScopedVector<TimeZoneRequest>::iterator position = + std::find(requests_.begin(), requests_.end(), request); + DCHECK_NE(&(*position), &(*requests_.end())); + if (position != requests_.end()) { + std::swap(*position, *requests_.rbegin()); + requests_.resize(requests_.size() - 1); + } callback.Run(timezone.Pass(), server_error); } |