fix(rpc): ignore redraw events when exiting (#22184)

When a TUI client has already stopped, handling UI events will cause a
heap-use-after-free, so ignore them.
This commit is contained in:
zeertzjq
2023-02-09 14:36:17 +08:00
committed by GitHub
parent ecc40660d1
commit b2b82ff142
2 changed files with 7 additions and 1 deletions

View File

@@ -247,7 +247,8 @@ static void parse_msgpack(Channel *channel)
Unpacker *p = channel->rpc.unpacker;
while (unpacker_advance(p)) {
if (p->type == kMessageTypeRedrawEvent) {
if (ui_client_channel_id) {
// When exiting, ui_client_stop() has already been called, so don't handle UI events.
if (ui_client_channel_id && !exiting) {
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) {