bpo-34427: Fix infinite loop when calling MutableSequence.extend() on self (GH-8813)

This commit is contained in:
Naris R 2018-08-31 02:56:14 +10:00 committed by Raymond Hettinger
parent e6dac00779
commit 1b5f9c9653
3 changed files with 15 additions and 0 deletions

View File

@ -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)

View File

@ -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
################################################################################

View File

@ -0,0 +1 @@
Fix infinite loop in ``a.extend(a)`` for ``MutableSequence`` subclasses.