diff options
author | Ben Kelly <ben@benjii.net> | 2017-02-07 10:56:47 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2017-03-01 20:37:36 +0100 |
commit | e1e9d27655bd0fd93dd09f3de907a03c96c59f55 (patch) | |
tree | 5e82be3793e02ed55bd2363e32b51d312faf1224 /package/libs/uclibc++ | |
parent | e19fbd32974dec3f01b8882413977aff0c7446c1 (diff) | |
download | upstream-e1e9d27655bd0fd93dd09f3de907a03c96c59f55.tar.gz upstream-e1e9d27655bd0fd93dd09f3de907a03c96c59f55.tar.bz2 upstream-e1e9d27655bd0fd93dd09f3de907a03c96c59f55.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>
Diffstat (limited to 'package/libs/uclibc++')
-rw-r--r-- | package/libs/uclibc++/patches/050-Bugfix-erase-on-derived-__base_associative.patch | 40 |
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 + |