diff options
author | Naris R <nariscatboy@gmail.com> | 2018-08-30 16:56:14 (GMT) |
---|---|---|
committer | Raymond Hettinger <rhettinger@users.noreply.github.com> | 2018-08-30 16:56:14 (GMT) |
commit | 1b5f9c9653f348b0aa8b7ca39f8a9361150f7dfc (patch) | |
tree | dca9f2435a0fdd8a30e1d3ecc1a3d2e3499379da | |
parent | e6dac0077996b1e1f886f036d6f2606237fa4c85 (diff) | |
download | cpython-1b5f9c9653f348b0aa8b7ca39f8a9361150f7dfc.zip cpython-1b5f9c9653f348b0aa8b7ca39f8a9361150f7dfc.tar.gz cpython-1b5f9c9653f348b0aa8b7ca39f8a9361150f7dfc.tar.bz2 |
bpo-34427: Fix infinite loop when calling MutableSequence.extend() on self (GH-8813)
-rw-r--r-- | Lib/_collections_abc.py | 2 | ||||
-rw-r--r-- | Lib/test/test_collections.py | 12 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-08-20-13-53-10.bpo-34427.tMRQjl.rst | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index dbe30df..c363987 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -986,6 +986,8 @@ class MutableSequence(Sequence): def extend(self, values): 'S.extend(iterable) -- extend sequence by appending elements from the iterable' + if values is self: + values = list(values) for v in values: self.append(v) diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 2099d23..0b7cb58 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1721,6 +1721,18 @@ class TestCollectionABCs(ABCTestCase): mss.clear() self.assertEqual(len(mss), 0) + # issue 34427 + # extending self should not cause infinite loop + items = 'ABCD' + mss2 = MutableSequenceSubclass() + mss2.extend(items + items) + mss.clear() + mss.extend(items) + mss.extend(mss) + self.assertEqual(len(mss), len(mss2)) + self.assertEqual(list(mss), list(mss2)) + + ################################################################################ ### Counter ################################################################################ diff --git a/Misc/NEWS.d/next/Library/2018-08-20-13-53-10.bpo-34427.tMRQjl.rst b/Misc/NEWS.d/next/Library/2018-08-20-13-53-10.bpo-34427.tMRQjl.rst new file mode 100644 index 0000000..f6e0e03 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-08-20-13-53-10.bpo-34427.tMRQjl.rst @@ -0,0 +1 @@ +Fix infinite loop in ``a.extend(a)`` for ``MutableSequence`` subclasses. |