Closed
Conversation
Some of these changes come from comparing `Curl_http` and `start_CONNECT`, which are similar, and adding things to them that are present in one and missing in another. The most important changes: - In `start_CONNECT`, add a missing `hyper_clientconn_free` call on the happy path. - In `start_CONNECT`, add a missing `hyper_request_free` on the error path. - In `bodysend`, add a missing `hyper_body_free` on an early-exit path. - In `bodysend`, remove an unnecessary `hyper_body_free` on a different error path that would cause a double-free. https://docs.rs/hyper/latest/hyper/ffi/fn.hyper_request_set_body.html says of `hyper_request_set_body`: "This takes ownership of the hyper_body *, you must not use it or free it after setting it on the request." This is true even if `hyper_request_set_body` returns an error; I confirmed this by looking at the hyper source code. Other changes are minor but make things slightly nicer.
Contributor
Author
|
I found these after looking very closely at ownership responsibilities in the hyper C API in hyperium/hyper#3296. |
bagder
approved these changes
Aug 28, 2023
Member
|
Thanks! |
ptitSeb
pushed a commit
to wasix-org/curl
that referenced
this pull request
Sep 25, 2023
Some of these changes come from comparing `Curl_http` and `start_CONNECT`, which are similar, and adding things to them that are present in one and missing in another. The most important changes: - In `start_CONNECT`, add a missing `hyper_clientconn_free` call on the happy path. - In `start_CONNECT`, add a missing `hyper_request_free` on the error path. - In `bodysend`, add a missing `hyper_body_free` on an early-exit path. - In `bodysend`, remove an unnecessary `hyper_body_free` on a different error path that would cause a double-free. https://docs.rs/hyper/latest/hyper/ffi/fn.hyper_request_set_body.html says of `hyper_request_set_body`: "This takes ownership of the hyper_body *, you must not use it or free it after setting it on the request." This is true even if `hyper_request_set_body` returns an error; I confirmed this by looking at the hyper source code. Other changes are minor but make things slightly nicer. Closes curl#11745
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Some of these changes come from comparing
Curl_httpandstart_CONNECT, which are similar, and adding things to them that are present in one and missing in another.The most important changes:
start_CONNECT, add a missinghyper_clientconn_freecall on the happy path.start_CONNECT, add a missinghyper_request_freeon the error path.bodysend, add a missinghyper_body_freeon an early-exit path.bodysend, remove an unnecessaryhyper_body_freeon a different error path that would cause a double-free. https://docs.rs/hyper/latest/hyper/ffi/fn.hyper_request_set_body.html says ofhyper_request_set_body: "This takes ownership of the hyper_body *, you must not use it or free it after setting it on the request." This is true even ifhyper_request_set_bodyreturns an error; I confirmed this by looking at the hyper source code.Other changes are minor but make things slightly nicer.