summaryrefslogtreecommitdiff
path: root/msgpack/_unpacker.pyx
diff options
context:
space:
mode:
authorINADA Naoki <songofacandy@gmail.com>2015-11-08 12:38:38 +0900
committerINADA Naoki <songofacandy@gmail.com>2015-11-08 12:43:54 +0900
commit35a69ac9c2fbf6b68b970352791f6d98fbd74963 (patch)
treefc571cccadcbc5a6e30b2d70f8de24eb9c7aec8f /msgpack/_unpacker.pyx
parenta329850147e045ca990c1ff870ce191c4efa4d06 (diff)
downloadmsgpack-python-35a69ac9c2fbf6b68b970352791f6d98fbd74963.tar.gz
Decrease refcnt when error happend while unpacking
Fixes #152
Diffstat (limited to 'msgpack/_unpacker.pyx')
-rw-r--r--msgpack/_unpacker.pyx5
1 files changed, 3 insertions, 2 deletions
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx
index 997979c..d359e57 100644
--- a/msgpack/_unpacker.pyx
+++ b/msgpack/_unpacker.pyx
@@ -47,6 +47,7 @@ cdef extern from "unpack.h":
execute_fn read_map_header
void unpack_init(unpack_context* ctx)
object unpack_data(unpack_context* ctx)
+ void unpack_clear(unpack_context* ctx)
cdef inline init_ctx(unpack_context *ctx,
object object_hook, object object_pairs_hook,
@@ -141,8 +142,8 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
if off < buf_len:
raise ExtraData(obj, PyBytes_FromStringAndSize(buf+off, buf_len-off))
return obj
- else:
- raise UnpackValueError("Unpack failed: error = %s" % (ret,))
+ unpack_clear(&ctx)
+ raise UnpackValueError("Unpack failed: error = %d" % (ret,))
def unpack(object stream, object object_hook=None, object list_hook=None,