12345678910111213141516171819202122232425262728293031323334353637383940 |
- From 946b29e62927eadfc4e87f27b8d30e5974b78c4c Mon Sep 17 00:00:00 2001
- From: Ben Kelly <ben@benjii.net>
- Date: Mon, 6 Feb 2017 13:08:25 +0200
- Subject: [PATCH] Bugfix erase() on derived __base_associative
- When calling erase() on a containers derived from __base_associative
- (e.g. multimap) and providing a pair of iterators a segfault will
- occur.
- Example code to reproduce:
- typedef std::multimap<int, int> testmap;
- testmap t;
- t.insert(std::pair<int, int>(1, 1));
- t.insert(std::pair<int, int>(2, 1));
- t.insert(std::pair<int, int>(3, 1));
- t.erase(t.begin(), t.end());
- Signed-off-by: Ben Kelly <ben@benjii.net>
- ---
- include/associative_base | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
- diff --git a/include/associative_base b/include/associative_base
- index 27ae0ef..be8b27f 100644
- --- a/include/associative_base
- +++ b/include/associative_base
- @@ -200,8 +200,7 @@ public:
- }
- void erase(iterator first, iterator last){
- while(first != last){
- - backing.erase(first.base_iterator());
- - ++first;
- + first = backing.erase(first.base_iterator());
- }
- }
-
- --
- 2.7.4
|