mirror of
https://github.com/python/cpython.git
synced 2024-11-27 11:55:13 +08:00
bpo-34427: Fix infinite loop when calling MutableSequence.extend() on self (GH-8813)
This commit is contained in:
parent
e6dac00779
commit
1b5f9c9653
@ -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)
|
||||
|
||||
|
@ -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
|
||||
################################################################################
|
||||
|
@ -0,0 +1 @@
|
||||
Fix infinite loop in ``a.extend(a)`` for ``MutableSequence`` subclasses.
|
Loading…
Reference in New Issue
Block a user