diff options
| author | Xavier Del Campo <xavier.delcampo@midokura.com> | 2023-11-20 12:20:51 +0100 |
|---|---|---|
| committer | Xavier Del Campo <xavier.delcampo@midokura.com> | 2023-11-20 16:25:58 +0100 |
| commit | 59a67a7541ee1559b140494c21a25b195246a4fa (patch) | |
| tree | d2bed79936276954b1d712f33993035d1082062c /handler.c | |
| parent | 65031ca3502e0c27780be847fd97c112546741a9 (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.c | 7 |
1 files changed, 2 insertions, 5 deletions
@@ -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; } |
