From: Nicholas Nethercote Date: Fri, 25 Aug 2023 05:01:53 +0000 (+1000) Subject: c-hyper: fix a memory leak in `Curl_http`. X-Git-Tag: curl-8_3_0~109 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c61dd5fed23525726270044f3baae2e767d87bcf;p=thirdparty%2Fcurl.git c-hyper: fix a memory leak in `Curl_http`. A request created with `hyper_request_new` must be consumed by either `hyper_clientconn_send` or `hyper_request_free`. This is not terrifically clear from the hyper docs -- `hyper_request_free` is documented only with "Free an HTTP request if not going to send it on a client" -- but a perusal of the hyper code confirms it. This commit adds a `hyper_request_free` to the `error:` path in `Curl_http` so that the request is consumed when an error occurs after the request is created but before it is sent. Fixes the first memory leak reported by Valgrind in #10803. Closes #11729 --- diff --git a/lib/c-hyper.c b/lib/c-hyper.c index 18d9206ca7..ebb885669b 100644 --- a/lib/c-hyper.c +++ b/lib/c-hyper.c @@ -1208,6 +1208,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) result = CURLE_OUT_OF_MEMORY; goto error; } + req = NULL; if(HYPERE_OK != hyper_executor_push(h->exec, sendtask)) { failf(data, "Couldn't hyper_executor_push the send"); @@ -1244,6 +1245,9 @@ error: if(handshake) hyper_task_free(handshake); + if(req) + hyper_request_free(req); + return result; }