summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Westerbaan <bas@westerbaan.name>2013-01-28 22:29:23 +0100
committerBas Westerbaan <bas@westerbaan.name>2013-01-28 22:29:23 +0100
commitb940802032adc16b074b1e29bed72825580c5c9f (patch)
tree74f1cd04d728b962c4360bf04d102086dca29110
parent6fa0f46a122c4f6be35415a3e65dcdc542fd3acd (diff)
downloadmsgpack-python-b940802032adc16b074b1e29bed72825580c5c9f.tar.gz
fallback: two fixes for raising ExtraData
-rw-r--r--msgpack/fallback.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index 220e0fe..392f7eb 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -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,
object_pairs_hook=object_pairs_hook)
ret = unpacker._fb_unpack()
- unpacker._fb_check_for_extradata()
+ if unpacker._fb_got_extradata():
+ raise ExtraData(ret, unpacker._fb_get_extradata())
return ret
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)
unpacker.feed(packed)
ret = unpacker._fb_unpack()
- unpacker._fb_check_for_extradata()
+ if unpacker._fb_got_extradata():
+ raise ExtraData(ret, unpacker._fb_get_extradata())
return ret
class Unpacker(object):
@@ -192,15 +194,16 @@ class Unpacker(object):
self._fb_buf_i = 0
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):
- raise ExtraData
+ return True
if self._fb_feeding:
- return
+ return False
if not self.file_like:
- return
- if not self.file_like.read(1):
- raise ExtraData
+ return False
+ if self.file_like.read(1):
+ return True
+ return False
def __iter__(self):
return self
@@ -216,6 +219,12 @@ class Unpacker(object):
def read_bytes(self, 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):
ret = ''
while len(ret) != n: