From faccc2a446734f9a9b3972ce2f2c73d60caccae0 Mon Sep 17 00:00:00 2001 From: Jonathan GUILLOT Date: Thu, 27 Jul 2023 16:58:29 +0200 Subject: [PATCH] output: fix segfault when using `-m last` option Check output list length before accessing previous or next item to avoid segfault. --- output.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/output.c b/output.c index 30f8c56..465c0ed 100644 --- a/output.c +++ b/output.c @@ -225,12 +225,10 @@ output_destroy(struct cg_output *output) if (wl_list_empty(&server->outputs)) { wl_display_terminate(server->wl_display); - } else if (server->output_mode == CAGE_MULTI_OUTPUT_MODE_LAST) { + } else if (server->output_mode == CAGE_MULTI_OUTPUT_MODE_LAST && !wl_list_empty(&server->outputs)) { struct cg_output *prev = wl_container_of(server->outputs.next, prev, link); - if (prev) { - output_enable(prev); - view_position_all(server); - } + output_enable(prev); + view_position_all(server); } } @@ -293,11 +291,9 @@ handle_new_output(struct wl_listener *listener, void *data) } } - if (server->output_mode == CAGE_MULTI_OUTPUT_MODE_LAST) { + if (server->output_mode == CAGE_MULTI_OUTPUT_MODE_LAST && wl_list_length(&server->outputs) > 1) { struct cg_output *next = wl_container_of(output->link.next, next, link); - if (next) { - output_disable(next); - } + output_disable(next); } if (!wlr_xcursor_manager_load(server->seat->xcursor_manager, wlr_output->scale)) {