Issue #23094: Fixed readline with frames in Python implementation of pickle.

This commit is contained in:
Serhiy Storchaka 2015-01-26 10:37:44 +02:00
commit 230586739c
3 changed files with 11 additions and 1 deletions

View File

@ -242,7 +242,7 @@ class _Unframer:
if not data: if not data:
self.current_frame = None self.current_frame = None
return self.file_readline() return self.file_readline()
if data[-1] != b'\n': if data[-1] != b'\n'[0]:
raise UnpicklingError( raise UnpicklingError(
"pickle exhausted before end of frame") "pickle exhausted before end of frame")
return data return data

View File

@ -1584,6 +1584,14 @@ class AbstractPickleTests(unittest.TestCase):
count_opcode(pickle.FRAME, pickled)) count_opcode(pickle.FRAME, pickled))
self.assertEqual(obj, self.loads(some_frames_pickle)) self.assertEqual(obj, self.loads(some_frames_pickle))
def test_frame_readline(self):
pickled = b'\x80\x04\x95\x05\x00\x00\x00\x00\x00\x00\x00I42\n.'
# 0: \x80 PROTO 4
# 2: \x95 FRAME 5
# 11: I INT 42
# 15: . STOP
self.assertEqual(self.loads(pickled), 42)
def test_nested_names(self): def test_nested_names(self):
global Nested global Nested
class Nested: class Nested:

View File

@ -218,6 +218,8 @@ Core and Builtins
Library Library
------- -------
- Issue #23094: Fixed readline with frames in Python implementation of pickle.
- Issue #23268: Fixed bugs in the comparison of ipaddress classes. - Issue #23268: Fixed bugs in the comparison of ipaddress classes.
- Issue #21408: Removed incorrect implementations of __ne__() which didn't - Issue #21408: Removed incorrect implementations of __ne__() which didn't