aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Kelly <ben@benjii.net>2017-02-07 10:56:47 +0200
committerFelix Fietkau <nbd@nbd.name>2017-02-09 12:26:55 +0100
commitda0b9110fc783245aaa88ae6ed28aa6d5fe1bdea (patch)
tree8a4ab237bb9608499d9bc60a54ed2df02779642e
parenta9d347c11c34e48d17e1a4902a56d1f2f577bfab (diff)
downloadupstream-da0b9110fc783245aaa88ae6ed28aa6d5fe1bdea.tar.gz
upstream-da0b9110fc783245aaa88ae6ed28aa6d5fe1bdea.tar.bz2
upstream-da0b9110fc783245aaa88ae6ed28aa6d5fe1bdea.zip
uclibc++: 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>
-rw-r--r--package/libs/uclibc++/patches/050-Bugfix-erase-on-derived-__base_associative.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/package/libs/uclibc++/patches/050-Bugfix-erase-on-derived-__base_associative.patch b/package/libs/uclibc++/patches/050-Bugfix-erase-on-derived-__base_associative.patch
new file mode 100644
index 0000000000..2ddb8a984e
--- /dev/null
+++ b/package/libs/uclibc++/patches/050-Bugfix-erase-on-derived-__base_associative.patch
@@ -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
+