aboutsummaryrefslogtreecommitdiff
path: root/handler.c
diff options
context:
space:
mode:
authorXavier Del Campo <xavier.delcampo@midokura.com>2023-11-20 12:20:51 +0100
committerXavier Del Campo <xavier.delcampo@midokura.com>2023-11-20 16:25:58 +0100
commit59a67a7541ee1559b140494c21a25b195246a4fa (patch)
treed2bed79936276954b1d712f33993035d1082062c /handler.c
parent65031ca3502e0c27780be847fd97c112546741a9 (diff)
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.
Diffstat (limited to 'handler.c')
-rw-r--r--handler.c7
1 files changed, 2 insertions, 5 deletions
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;
}