Changes by Serhiy Storchaka storch...@gmail.com:
--
resolution: - fixed
stage: patch review - resolved
status: open - closed
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23094
___
Roundup Robot added the comment:
New changeset d5e13b74d377 by Serhiy Storchaka in branch '3.4':
Issue #23094: Fixed readline with frames in Python implementation of pickle.
https://hg.python.org/cpython/rev/d5e13b74d377
New changeset c347c21e5afa by Serhiy Storchaka in branch 'default':
Issue
Serhiy Storchaka added the comment:
If there are no objections I'm going to commit the patch.
--
assignee: - serhiy.storchaka
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23094
___
Changes by Serhiy Storchaka storch...@gmail.com:
--
keywords: +needs review
stage: needs patch - patch review
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23094
___
Changes by Serhiy Storchaka storch...@gmail.com:
--
keywords: +patch
Added file: http://bugs.python.org/file37521/pickle_frame_readline.patch
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23094
CensoredUsername added the comment:
Indeed. In my case the problem was caused a subclassed Pickler which still used
GLOBAL instead of STACK_GLOBAL in protocol 4.
My own minimized test case was:
data = b\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00cpickle\nPickler\n.
pickletools.dis(data)
New submission from CensoredUsername:
If a pickle frame ends at the end of a pickle._Unframer.readline() call then an
UnpicklingError(pickle exhausted before end of frame) will unconditionally be
raised due to a faulty check if the frame ended before the line ended.
It concerns this
Antoine Pitrou added the comment:
Thanks for the report. Do you have actual data that can exhibit the problem?
--
nosy: +pitrou, serhiy.storchaka
versions: +Python 3.5
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23094
Serhiy Storchaka added the comment:
readline() is used only when unpickle opcodes PERSID, INT, LONG, FLOAT, STRING,
UNICODE, INST, GLOBAL, GET, PUT. These opcodes are not used with protocol 4
(all opcodes except GLOBAL is used only with protocol 0, and GLOBAL is used
with protocol = 3).