http: Initialize ‘on_status’ when using the http-parser backend.#6870
Conversation
Fixes a bug likely introduced in d396819 (in 1.8.1) whereby ‘proxy_settings.on_status’ would be left uninitialized when using the ‘http-parser’ backend, eventually leading to a segfault in ‘http_parser_execute’. Valgrind would report use of the uninitialized value like so: Conditional jump or move depends on uninitialised value(s) at 0x50CD533: http_parser_execute (http_parser.c:910) by 0x4928504: git_http_parser_execute (httpparser.c:82) by 0x4925C42: client_read_and_parse (httpclient.c:1178) by 0x4926F27: git_http_client_read_response (httpclient.c:1458) by 0x49255FE: http_stream_read (http.c:427) by 0x4929B90: git_smart__recv (smart.c:29) by 0x492C147: git_smart__store_refs (smart_protocol.c:58) by 0x4929F6C: git_smart__connect (smart.c:171) by 0x4904DCE: git_remote_connect_ext (remote.c:963) by 0x48A15D2: clone_into (clone.c:449) by 0x48A15D2: git__clone (clone.c:546) by 0x4010E9: main (libgit2-proxy.c:20)
bbd0d7d to
ea7e18e
Compare
ethomson
left a comment
There was a problem hiding this comment.
Instead of trying to set individual members, maybe we should just memset the whole things to zero (which emulates our prior behavior). I suggest this because the http-parser that we used to use predated the chunk boundaries processing that came from the proxygen fork...? So not all http-parser implementations (including the one that we previously shipped) seem to have this chunk completion callback.
|
Thanks for catching this and reporting it. 🙏 |
Co-authored-by: Edward Thomson <[email protected]>
Sure, using |
|
Thanks for this! |
Fixes a bug likely introduced in
d396819 (in 1.8.1) whereby
proxy_settings.on_statuswould be left uninitialized when using the ‘http-parser’ backend (-DUSE_HTTP_PARSER=http-parser), eventually leading to a segfault inhttp_parser_execute. Valgrind would report use of the uninitialized value like so:A simple reproducer is this program:
Note that this bug does not exist when building libgit2 with
-DUSE_HTTP_PARSER=llhttp.