From 34900c3b4deb3a356997ab392234d74f8f0c3395 Mon Sep 17 00:00:00 2001 From: Yao Chen Date: Mon, 19 Mar 2018 13:43:29 -0700 Subject: [PATCH] Fix a UidMap crash. Bug: 75968717 Test: CTS with sanitizer Change-Id: I9516d3b59f72816159c9fc1fe75ca64bfe21d799 --- cmds/statsd/src/packages/UidMap.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmds/statsd/src/packages/UidMap.cpp b/cmds/statsd/src/packages/UidMap.cpp index efbe96eebb25e..e97d8b2af1aee 100644 --- a/cmds/statsd/src/packages/UidMap.cpp +++ b/cmds/statsd/src/packages/UidMap.cpp @@ -377,17 +377,20 @@ void UidMap::getOutput(const int64_t& timestamp, const ConfigKey& key, vector prevMin) { // Delete anything possible now that the minimum has // moved forward. int64_t cutoff_nanos = newMin; - for (auto it_snapshots = mSnapshots.begin(); it_snapshots != mSnapshots.end(); - ++it_snapshots) { + for (auto it_snapshots = mSnapshots.begin(); it_snapshots != mSnapshots.end();) { if (it_snapshots->timestampNs < cutoff_nanos) { mBytesUsed -= it_snapshots->bytes.size() + kBytesTimestampField; - mSnapshots.erase(it_snapshots); + it_snapshots = mSnapshots.erase(it_snapshots); + } else { + ++it_snapshots; } } - for (auto it_changes = mChanges.begin(); it_changes != mChanges.end(); ++it_changes) { + for (auto it_changes = mChanges.begin(); it_changes != mChanges.end();) { if (it_changes->timestampNs < cutoff_nanos) { mBytesUsed -= kBytesChangeRecord; - mChanges.erase(it_changes); + it_changes = mChanges.erase(it_changes); + } else { + ++it_changes; } }