aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/msgpack_rpc/channel.c5
-rw-r--r--test/functional/api/server_notifications_spec.lua7
2 files changed, 12 insertions, 0 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
index 3244d83a93..bb4aea0986 100644
--- a/src/nvim/msgpack_rpc/channel.c
+++ b/src/nvim/msgpack_rpc/channel.c
@@ -505,6 +505,11 @@ end:
static void unsubscribe(Channel *channel, char *event)
{
char *event_string = pmap_get(cstr_t)(event_strings, event);
+ if (!event_string) {
+ WLOG("RPC: ch %" PRIu64 ": tried to unsubscribe unknown event '%s'",
+ channel->id, event);
+ return;
+ }
pmap_del(cstr_t)(channel->rpc.subscribed_events, event_string);
map_foreach_value(channels, channel, {
diff --git a/test/functional/api/server_notifications_spec.lua b/test/functional/api/server_notifications_spec.lua
index 1d64ae7103..29cd38ef0d 100644
--- a/test/functional/api/server_notifications_spec.lua
+++ b/test/functional/api/server_notifications_spec.lua
@@ -65,4 +65,11 @@ describe('notify', function()
eq(nest_level, act_nest_level)
end)
end)
+
+ it('unsubscribe non-existing event #8745', function()
+ nvim('subscribe', 'event1')
+ nvim('unsubscribe', 'doesnotexist')
+ nvim('unsubscribe', 'event1')
+ eq(2, eval('1+1')) -- Still alive?
+ end)
end)