Skip to content

Commit

Permalink
uclibc++: patch bugfix erase() on derived __base_associative
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
scrpi authored and jow- committed Mar 1, 2017
1 parent e19fbd3 commit e1e9d27
Showing 1 changed file with 40 additions and 0 deletions.
@@ -0,0 +1,40 @@
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

0 comments on commit e1e9d27

Please sign in to comment.