diff options
author | INADA Naoki <songofacandy@gmail.com> | 2013-02-20 23:07:57 -0800 |
---|---|---|
committer | INADA Naoki <songofacandy@gmail.com> | 2013-02-20 23:07:57 -0800 |
commit | cd3590e785ce9effc80d6226dba7c0ab0e251ee8 (patch) | |
tree | 412527842934104ae3748a80414dea2c4f433320 /msgpack/fallback.py | |
parent | 1532eaa6842470f5ad8e318451c47dabe92b8b43 (diff) | |
parent | 43dd224d52eb4711c68101b40b910d252dacc290 (diff) | |
download | msgpack-python-cd3590e785ce9effc80d6226dba7c0ab0e251ee8.tar.gz |
Merge pull request #50 from msgpack/skip-reserved
Unpacker skip reserved bytes
Diffstat (limited to 'msgpack/fallback.py')
-rw-r--r-- | msgpack/fallback.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py index 0016bd1..311f16b 100644 --- a/msgpack/fallback.py +++ b/msgpack/fallback.py @@ -57,6 +57,7 @@ TYPE_IMMEDIATE = 0 TYPE_ARRAY = 1 TYPE_MAP = 2 TYPE_RAW = 3 +TYPE_RESERVED = 4 DEFAULT_RECURSE_LIMIT=511 @@ -267,8 +268,10 @@ class Unpacker(object): write_bytes(ret) return ret - def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None): + def _read_header(self, execute=EX_CONSTRUCT, write_bytes=None): typ = TYPE_IMMEDIATE + n = 0 + obj = None c = self._fb_read(1, write_bytes) b = ord(c) if b & 0b10000000 == 0: @@ -332,7 +335,14 @@ class Unpacker(object): n = struct.unpack(">I", self._fb_read(4, write_bytes))[0] typ = TYPE_MAP else: - raise UnpackValueError("Unknown header: 0x%x" % b) + typ = TYPE_RESERVED + return typ, n, obj + + def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None): + typ = TYPE_RESERVED + while typ == TYPE_RESERVED: + typ, n, obj = self._read_header(self, execute, write_bytes) + if execute == EX_READ_ARRAY_HEADER: if typ != TYPE_ARRAY: raise UnpackValueError("Expected array") |