summaryrefslogtreecommitdiffstats
path: root/chromeos/timezone
diff options
context:
space:
mode:
authoralemate <alemate@chromium.org>2015-03-03 05:58:32 -0800
committerCommit bot <commit-bot@chromium.org>2015-03-03 13:59:35 +0000
commitae10a9150af37a77ed8e9a71b19ad441d48f1cc7 (patch)
tree026d43e62f4815d5c95c048d440b89b9b22723b9 /chromeos/timezone
parent3edb4989f8f69c968c0df14cb1c26d21dd19bf1f (diff)
downloadchromium_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.cc11
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);
}