From 1a090983f53453069487426fcd6dff9c817bb70f Mon Sep 17 00:00:00 2001 From: Jack Danger Canty Date: Mon, 19 Jan 2015 12:37:21 -0800 Subject: [PATCH] Fix CID #102150 Don't attempt to write an error message to a channel that may have been closed and freed. [CID #102150](https://scan8.coverity.com/reports.htm#v22612/p10672/fileInstanceId=3625286&defectInstanceId=1525721&mergedDefectId=102150) --- src/nvim/msgpack_rpc/channel.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index c8f8252e6d..920274f850 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -442,17 +442,18 @@ static void handle_request(Channel *channel, msgpack_object *request) if (error.set) { // Validation failed, send response with error - channel_write(channel, - serialize_response(channel->id, - request_id, - &error, - NIL, - &out_buffer)); - char buf[256]; - snprintf(buf, sizeof(buf), - "Channel %" PRIu64 " sent an invalid message, closing.", - channel->id); - call_set_error(channel, buf); + if (channel_write(channel, + serialize_response(channel->id, + request_id, + &error, + NIL, + &out_buffer))) { + char buf[256]; + snprintf(buf, sizeof(buf), + "Channel %" PRIu64 " sent an invalid message, closing.", + channel->id); + call_set_error(channel, buf); + } return; } @@ -619,8 +620,7 @@ static void unsubscribe(Channel *channel, char *event) free(event_string); } -/// Close the channel streams/job. The channel resources will be freed by -/// free_channel later. +/// Close the channel streams/job and free the channel resources. static void close_channel(Channel *channel) { if (channel->closed) {