summaryrefslogtreecommitdiff
path: root/msgpack/fallback.py
diff options
context:
space:
mode:
Diffstat (limited to 'msgpack/fallback.py')
-rw-r--r--msgpack/fallback.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index a866ff1..2f83a20 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -208,17 +208,13 @@ class Unpacker(object):
def __iter__(self):
return self
- def next(self):
- try:
- ret = self._fb_unpack(EX_CONSTRUCT, None)
- self._fb_consume()
- return ret
- except OutOfData:
- raise StopIteration
-
def read_bytes(self, n):
return self._fb_read(n)
+ def _fb_rollback(self):
+ self._fb_buf_i = 0
+ self._fb_buf_o = 0
+
def _fb_get_extradata(self):
bufs = self._fb_buffers[self._fb_buf_i:]
if bufs:
@@ -244,6 +240,7 @@ class Unpacker(object):
self._fb_buf_o = 0
self._fb_buf_i += 1
if len(ret) != n:
+ self._fb_rollback()
raise OutOfData
if write_bytes is not None:
write_bytes(ret)
@@ -363,6 +360,14 @@ class Unpacker(object):
assert typ == TYPE_IMMEDIATE
return obj
+ def next(self):
+ try:
+ ret = self._fb_unpack(EX_CONSTRUCT, None)
+ self._fb_consume()
+ return ret
+ except OutOfData:
+ raise StopIteration
+
def skip(self, write_bytes=None):
self._fb_unpack(EX_SKIP, write_bytes)
self._fb_consume()