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
This commit is contained in:
Nicholas Nethercote 2023-08-25 15:01:53 +10:00 committed by Daniel Stenberg
parent 7e371dc994
commit c61dd5fed2
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -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;
}