Skip to content

Commit 03dd6a2

Browse files
committed
Add a check for 0 items to APPENDS and ADDITEMS opcodes
1 parent f079979 commit 03dd6a2

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

Lib/pickle.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,6 +1785,8 @@ def load_append(self):
17851785
def load_appends(self):
17861786
items = self.pop_mark()
17871787
list_obj = self.stack[-1]
1788+
if len(items) == 0: # nothing to do
1789+
return
17881790
try:
17891791
extend = list_obj.extend
17901792
except AttributeError:
@@ -1818,6 +1820,8 @@ def load_setitems(self):
18181820
def load_additems(self):
18191821
items = self.pop_mark()
18201822
set_obj = self.stack[-1]
1823+
if len(items) == 0: # nothing to do
1824+
return
18211825
if isinstance(set_obj, set):
18221826
set_obj.update(items)
18231827
else:

Lib/test/pickletester.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,10 @@ def test_large_binstring(self):
11051105
with self.assertRaisesRegex(pickle.UnpicklingError, errmsg):
11061106
self.loads(b'T\0\0\0\x80')
11071107

1108+
def test_appends_additems_no_items(self):
1109+
self.assertEqual(self.loads(b'K\x01(e.'), 1)
1110+
self.assertEqual(self.loads(b'K\x01(\x90.'), 1)
1111+
11081112
def test_get(self):
11091113
pickled = b'((lp100000\ng100000\nt.'
11101114
unpickled = self.loads(pickled)

0 commit comments

Comments
 (0)