mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-10-26 15:14:10 +00:00
fallback: two fixes for raising ExtraData
This commit is contained in:
parent
6fa0f46a12
commit
b940802032
1 changed files with 17 additions and 8 deletions
|
|
@ -71,7 +71,8 @@ def unpack(stream, object_hook=None, list_hook=None, use_list=True,
|
||||||
use_list=use_list, encoding=encoding, unicode_errors=unicode_errors,
|
use_list=use_list, encoding=encoding, unicode_errors=unicode_errors,
|
||||||
object_pairs_hook=object_pairs_hook)
|
object_pairs_hook=object_pairs_hook)
|
||||||
ret = unpacker._fb_unpack()
|
ret = unpacker._fb_unpack()
|
||||||
unpacker._fb_check_for_extradata()
|
if unpacker._fb_got_extradata():
|
||||||
|
raise ExtraData(ret, unpacker._fb_get_extradata())
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def unpackb(packed, object_hook=None, list_hook=None, use_list=True,
|
def unpackb(packed, object_hook=None, list_hook=None, use_list=True,
|
||||||
|
|
@ -85,7 +86,8 @@ def unpackb(packed, object_hook=None, list_hook=None, use_list=True,
|
||||||
object_pairs_hook=object_pairs_hook)
|
object_pairs_hook=object_pairs_hook)
|
||||||
unpacker.feed(packed)
|
unpacker.feed(packed)
|
||||||
ret = unpacker._fb_unpack()
|
ret = unpacker._fb_unpack()
|
||||||
unpacker._fb_check_for_extradata()
|
if unpacker._fb_got_extradata():
|
||||||
|
raise ExtraData(ret, unpacker._fb_get_extradata())
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
class Unpacker(object):
|
class Unpacker(object):
|
||||||
|
|
@ -192,15 +194,16 @@ class Unpacker(object):
|
||||||
self._fb_buf_i = 0
|
self._fb_buf_i = 0
|
||||||
self._fb_buf_n = sum(map(len, self._fb_buffers))
|
self._fb_buf_n = sum(map(len, self._fb_buffers))
|
||||||
|
|
||||||
def _fb_check_for_extradata(self):
|
def _fb_got_extradata(self):
|
||||||
if self._fb_buf_i != len(self._fb_buffers):
|
if self._fb_buf_i != len(self._fb_buffers):
|
||||||
raise ExtraData
|
return True
|
||||||
if self._fb_feeding:
|
if self._fb_feeding:
|
||||||
return
|
return False
|
||||||
if not self.file_like:
|
if not self.file_like:
|
||||||
return
|
return False
|
||||||
if not self.file_like.read(1):
|
if self.file_like.read(1):
|
||||||
raise ExtraData
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
@ -216,6 +219,12 @@ class Unpacker(object):
|
||||||
def read_bytes(self, n):
|
def read_bytes(self, n):
|
||||||
return self._fb_read(n)
|
return self._fb_read(n)
|
||||||
|
|
||||||
|
def _fb_get_extradata(self):
|
||||||
|
bufs = self._fb_buffers[self._fb_buf_i:]
|
||||||
|
if bufs:
|
||||||
|
bufs[0] = bufs[0][self._fb_buf_o:]
|
||||||
|
return ''.join(bufs)
|
||||||
|
|
||||||
def _fb_read(self, n, write_bytes=None):
|
def _fb_read(self, n, write_bytes=None):
|
||||||
ret = ''
|
ret = ''
|
||||||
while len(ret) != n:
|
while len(ret) != n:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue