From 87081b8391edb3a5e3bd0dede45534f191d1f84a Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 28 Jun 2017 17:29:20 -0700 Subject: [core] Fix iterator invalidation in erase_if vector::erase invalidates iterators. It's not safe for erase_if to cache the end iterator nor increment, then erase. --- src/mbgl/util/std.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mbgl/util/std.hpp b/src/mbgl/util/std.hpp index 974e21329c..1db20e09e5 100644 --- a/src/mbgl/util/std.hpp +++ b/src/mbgl/util/std.hpp @@ -8,10 +8,10 @@ namespace mbgl { namespace util { template -void erase_if(Container &container, ForwardIterator it, const ForwardIterator end, Predicate pred) { - while (it != end) { +void erase_if(Container &container, ForwardIterator it, Predicate pred) { + while (it != container.end()) { if (pred(*it)) { - container.erase(it++); + it = container.erase(it); } else { ++it; } @@ -20,7 +20,7 @@ void erase_if(Container &container, ForwardIterator it, const ForwardIterator en template void erase_if(Container &container, Predicate pred) { - erase_if(container, container.begin(), container.end(), pred); + erase_if(container, container.begin(), pred); } } // namespace util -- cgit v1.2.1