8000 Merge pull request #50 from msgpack/skip-reserved · peter80/msgpack-python@cd3590e · GitHub
[go: up one dir, main page]

Skip to content

Commit cd3590e

Browse files
committed
Merge pull request msgpack#50 from msgpack/skip-reserved
Unpacker skip reserved bytes
2 parents 1532eaa + 43dd224 commit cd3590e

File tree

3 files changed

+241
-178
lines changed

3 files changed

+241
-178
lines changed

msgpack/fallback.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def getvalue(self):
5757
TYPE_ARRAY = 1
5858
TYPE_MAP = 2
5959
TYPE_RAW = 3
60+
TYPE_RESERVED = 4
6061

6162
DEFAULT_RECURSE_LIMIT=511
6263

@@ -267,8 +268,10 @@ def _fb_read(self, n, write_bytes=None):
267268
write_bytes(ret)
268269
return ret
269270

270-
def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None):
271+
def _read_header(self, execute=EX_CONSTRUCT, write_bytes=None):
271272
typ = TYPE_IMMEDIATE
273+
n = 0
274+
obj = None
272275
c = self._fb_read(1, write_bytes)
273276
b = ord(c)
274277
if b & 0b10000000 == 0:
@@ -332,7 +335,14 @@ def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None):
332335
n = struct.unpack(">I", self._fb_read(4, write_bytes))[0]
333336
typ = TYPE_MAP
334337
else:
335-
raise UnpackValueError("Unknown header: 0x%x" % b)
338+
typ = TYPE_RESERVED
339+
return typ, n, obj
340+
341+
def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None):
342+
typ = TYPE_RESERVED
343+
while typ == TYPE_RESERVED:
344+
typ, n, obj = self._read_header(self, execute, write_bytes)
345+
336346
if execute == EX_READ_ARRAY_HEADER:
337347
if typ != TYPE_ARRAY:
338348
raise UnpackValueError("Expected array")

0 commit comments

Comments
 (0)
0