mirror of
https://github.com/msgpack/msgpack-python.git
synced 2026-02-06 17:59:52 +00:00
Merge pull request #125 from bwesterb/master
Rollback to correct position in the case of OutOfData. Fixes #124
This commit is contained in:
commit
3f5e058264
2 changed files with 16 additions and 1 deletions
|
|
@ -195,6 +195,9 @@ class Unpacker(object):
|
|||
# the buffer is not "consumed" completely, for efficiency sake.
|
||||
# Instead, it is done sloppily. To make sure we raise BufferFull at
|
||||
# the correct moments, we have to keep track of how sloppy we were.
|
||||
# Furthermore, when the buffer is incomplete (that is: in the case
|
||||
# we raise an OutOfData) we need to rollback the buffer to the correct
|
||||
# state, which _fb_slopiness records.
|
||||
self._fb_sloppiness = 0
|
||||
self._max_buffer_size = max_buffer_size or 2**31-1
|
||||
if read_size > self._max_buffer_size:
|
||||
|
|
@ -283,7 +286,7 @@ class Unpacker(object):
|
|||
|
||||
def _fb_rollback(self):
|
||||
self._fb_buf_i = 0
|
||||
self._fb_buf_o = 0
|
||||
self._fb_buf_o = self._fb_sloppiness
|
||||
|
||||
def _fb_get_extradata(self):
|
||||
bufs = self._fb_buffers[self._fb_buf_i:]
|
||||
|
|
|
|||
|
|
@ -84,3 +84,15 @@ def test_readbytes():
|
|||
assert unpacker.read_bytes(3) == b'oob'
|
||||
assert unpacker.unpack() == ord(b'a')
|
||||
assert unpacker.unpack() == ord(b'r')
|
||||
|
||||
def test_issue124():
|
||||
unpacker = Unpacker()
|
||||
unpacker.feed(b'\xa1?\xa1!')
|
||||
assert tuple(unpacker) == (b'?', b'!')
|
||||
assert tuple(unpacker) == ()
|
||||
unpacker.feed(b"\xa1?\xa1")
|
||||
assert tuple(unpacker) == (b'?',)
|
||||
assert tuple(unpacker) == ()
|
||||
unpacker.feed(b"!")
|
||||
assert tuple(unpacker) == (b'!',)
|
||||
assert tuple(unpacker) == ()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue