fix(rpc): ignore redraw events when not in UI client (#21892)

Otherwise it will crash.
This commit is contained in:
zeertzjq 2023-02-09 10:53:47 +08:00 committed by GitHub
parent ffd216e869
commit ecc40660d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 4 deletions

View File

@ -247,10 +247,12 @@ static void parse_msgpack(Channel *channel)
Unpacker *p = channel->rpc.unpacker;
while (unpacker_advance(p)) {
if (p->type == kMessageTypeRedrawEvent) {
if (p->grid_line_event) {
ui_client_event_raw_line(p->grid_line_event);
} else if (p->ui_handler.fn != NULL && p->result.type == kObjectTypeArray) {
p->ui_handler.fn(p->result.data.array);
if (ui_client_channel_id) {
if (p->grid_line_event) {
ui_client_event_raw_line(p->grid_line_event);
} else if (p->ui_handler.fn != NULL && p->result.type == kObjectTypeArray) {
p->ui_handler.fn(p->result.data.array);
}
}
arena_mem_free(arena_finish(&p->arena));
} else if (p->type == kMessageTypeResponse) {

View File

@ -337,6 +337,21 @@ describe('server -> client', function()
eq('localhost:', string.sub(address,1,10))
connect_test(server, 'tcp', address)
end)
it('does not crash on receiving UI events', function()
local server = spawn(nvim_argv)
set_session(server)
local address = funcs.serverlist()[1]
local client = spawn(nvim_argv, false, nil, true)
set_session(client)
local id = funcs.sockconnect('pipe', address, {rpc=true})
funcs.rpcrequest(id, 'nvim_ui_attach', 80, 24, {})
assert_alive()
server:close()
client:close()
end)
end)
describe('connecting to its own pipe address', function()