summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-06-28 17:29:20 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-06-28 17:56:51 -0700
commit34453eb4e27c0bf45027700e45ad69435f3566d7 (patch)
tree7dbd69274051ca8edcfa4a9dd62632e1768f4b27
parent6aecc66fc876825e164675f745ca9c71000ce515 (diff)
downloadqtlocation-mapboxgl-34453eb4e27c0bf45027700e45ad69435f3566d7.tar.gz
[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.
-rw-r--r--src/mbgl/util/std.hpp8
1 files changed, 4 insertions, 4 deletions
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 <typename Container, typename ForwardIterator, typename Predicate>
-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 <typename Container, typename Predicate>
void erase_if(Container &container, Predicate pred) {
- erase_if(container, container.begin(), container.end(), pred);
+ erase_if(container, container.begin(), pred);
}
} // namespace util