channel.c:call_set_error(): fix memory leak

This commit is contained in:
Justin M. Keyes
2017-08-18 14:13:28 +02:00
parent af993da435
commit 0f442c328e
2 changed files with 7 additions and 1 deletions

View File

@@ -868,6 +868,7 @@ static void call_set_error(Channel *channel, char *msg, int loglevel)
ChannelCallFrame *frame = kv_A(channel->call_stack, i); ChannelCallFrame *frame = kv_A(channel->call_stack, i);
frame->returned = true; frame->returned = true;
frame->errored = true; frame->errored = true;
api_free_object(frame->result);
frame->result = STRING_OBJ(cstr_to_string(msg)); frame->result = STRING_OBJ(cstr_to_string(msg));
} }

View File

@@ -88,7 +88,12 @@ bool msgpack_rpc_to_object(const msgpack_object *const obj, Object *const arg)
{ {
bool ret = true; bool ret = true;
kvec_t(MPToAPIObjectStackItem) stack = KV_INITIAL_VALUE; kvec_t(MPToAPIObjectStackItem) stack = KV_INITIAL_VALUE;
kv_push(stack, ((MPToAPIObjectStackItem) { obj, arg, false, 0 })); kv_push(stack, ((MPToAPIObjectStackItem) {
.mobj = obj,
.aobj = arg,
.container = false,
.idx = 0,
}));
while (ret && kv_size(stack)) { while (ret && kv_size(stack)) {
MPToAPIObjectStackItem cur = kv_last(stack); MPToAPIObjectStackItem cur = kv_last(stack);
if (!cur.container) { if (!cur.container) {