aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Danger Canty <jackdanger@squareup.com>2015-01-19 12:37:21 -0800
committerJack Danger Canty <jackdanger@squareup.com>2015-01-22 00:17:42 -0800
commit1a090983f53453069487426fcd6dff9c817bb70f (patch)
tree6df806b7a5d3d81b050c82136414cc872fee5364
parentd550eecf7092397d064df26850d4a09d9ab4a481 (diff)
downloadrneovim-1a090983f53453069487426fcd6dff9c817bb70f.tar.gz
rneovim-1a090983f53453069487426fcd6dff9c817bb70f.tar.bz2
rneovim-1a090983f53453069487426fcd6dff9c817bb70f.zip
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)
-rw-r--r--src/nvim/msgpack_rpc/channel.c26
1 files 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) {