Skip to content

Commit

Permalink
c-hyper: fix a memory leak in Curl_http.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nnethercote authored and bagder committed Aug 25, 2023
1 parent 7e371dc commit c61dd5f
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/c-hyper.c
Expand Up @@ -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");
Expand Down Expand Up @@ -1244,6 +1245,9 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
if(handshake)
hyper_task_free(handshake);

if(req)
hyper_request_free(req);

return result;
}

Expand Down

0 comments on commit c61dd5f

Please sign in to comment.