diff options
-rw-r--r-- | src/nvim/msgpack_rpc/channel.c | 5 | ||||
-rw-r--r-- | test/functional/api/server_notifications_spec.lua | 7 |
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) |