From 59a67a7541ee1559b140494c21a25b195246a4fa Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Date: Mon, 20 Nov 2023 12:20:51 +0100 Subject: Fix double-free on failed server_client_close Even if server_client_close fails, it is needed for client_free to remove the dangling reference from h->clients. --- handler.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'handler.c') diff --git a/handler.c b/handler.c index f6e47a3..ffd37dd 100644 --- a/handler.c +++ b/handler.c @@ -152,13 +152,13 @@ static void client_free(struct client *const c) static int remove_client_from_list(struct handler *const h, struct client *const c) { - int ret = -1; + int ret = 0; if (server_client_close(h->server, c->c)) { fprintf(stderr, "%s: server_client_close failed\n", __func__); - goto end; + ret = -1; } for (struct client *cl = h->clients, *prev = NULL; cl; @@ -175,9 +175,6 @@ static int remove_client_from_list(struct handler *const h, } } - ret = 0; - -end: client_free(c); return ret; } -- cgit v1.2.3