aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-10-23 10:29:42 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-10-23 21:19:08 -0300
commit9abcd9a4a095ea1c96efb3a63890e8b919b20d22 (patch)
treee6a2c1d31daccde4693cd27acffb95a83d458104 /src
parentd4f78127fb49c61de40a57a5dbf6e51c4fc1449a (diff)
downloadrneovim-9abcd9a4a095ea1c96efb3a63890e8b919b20d22.tar.gz
rneovim-9abcd9a4a095ea1c96efb3a63890e8b919b20d22.tar.bz2
rneovim-9abcd9a4a095ea1c96efb3a63890e8b919b20d22.zip
msgpack-rpc: Fix error handling and leak in call_request_handler
Free the arguments array after sending the response and also avoid double-sending responses in cases of errors.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/msgpack_rpc/channel.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
index 3622c8252d..7b51eefa3a 100644
--- a/src/nvim/msgpack_rpc/channel.c
+++ b/src/nvim/msgpack_rpc/channel.c
@@ -455,14 +455,12 @@ static void call_request_handler(Channel *channel,
// send the response
msgpack_packer response;
msgpack_packer_init(&response, &out_buffer, msgpack_sbuffer_write);
-
- if (error.set) {
- channel_write(channel,
- serialize_response(request_id, &error, NIL, &out_buffer));
- }
-
- channel_write(channel,
- serialize_response(request_id, &error, result, &out_buffer));
+ channel_write(channel, serialize_response(request_id,
+ &error,
+ result,
+ &out_buffer));
+ // All arguments were freed already, but we still need to free the array
+ free(args.items);
}
static bool channel_write(Channel *channel, WBuffer *buffer)