summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-04-22 14:46:54 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-04-22 14:46:54 +0900
commitd24193630ee5f3b5fcf5fd00bcaf95106b7a9c6d (patch)
tree95af8fca7c931a38fdbaa4c01764fcd3ce5a6927 /cpp
parent354af69f6204ba4523cf7ca3e50f2af1ad8d609e (diff)
downloadmsgpack-python-d24193630ee5f3b5fcf5fd00bcaf95106b7a9c6d.tar.gz
reverts variable-length stack: avoids memory leak
Diffstat (limited to 'cpp')
-rw-r--r--cpp/unpack.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/cpp/unpack.c b/cpp/unpack.c
index 98c8653..34016fd 100644
--- a/cpp/unpack.c
+++ b/cpp/unpack.c
@@ -44,7 +44,6 @@ struct template_context;
typedef struct template_context template_context;
static void template_init(template_context* ctx);
-static void template_destroy(template_context* ctx);
static msgpack_object template_data(template_context* ctx);
@@ -216,7 +215,6 @@ bool msgpack_unpacker_init(msgpack_unpacker* mpac, size_t initial_buffer_size)
void msgpack_unpacker_destroy(msgpack_unpacker* mpac)
{
msgpack_zone_free(mpac->z);
- template_destroy(CTX_CAST(mpac->ctx));
free(mpac->ctx);
decl_count(mpac->buffer);
}
@@ -370,7 +368,6 @@ msgpack_unpack_return
msgpack_unpack(const char* data, size_t len, size_t* off,
msgpack_zone* z, msgpack_object* result)
{
- msgpack_unpack_return ret = MSGPACK_UNPACK_SUCCESS;
template_context ctx;
template_init(&ctx);
@@ -382,26 +379,21 @@ msgpack_unpack(const char* data, size_t len, size_t* off,
int e = template_execute(&ctx, data, len, &noff);
if(e < 0) {
- ret = MSGPACK_UNPACK_PARSE_ERROR;
- goto out;
+ return MSGPACK_UNPACK_PARSE_ERROR;
}
if(off != NULL) { *off = noff; }
if(e == 0) {
- ret = MSGPACK_UNPACK_CONTINUE;
- goto out;
+ return MSGPACK_UNPACK_CONTINUE;
}
*result = template_data(&ctx);
if(noff < len) {
- ret = MSGPACK_UNPACK_EXTRA_BYTES;
- goto out;
+ return MSGPACK_UNPACK_EXTRA_BYTES;
}
-out:
- template_destroy(&ctx);
- return ret;
+ return MSGPACK_UNPACK_SUCCESS;
}