Merge branch 'jk/http-leakfixes'
Leakfixes. * jk/http-leakfixes: (28 commits) http-push: clean up local_refs at exit http-push: clean up loose request when falling back to packed http-push: clean up objects list http-push: free xml_ctx.cdata after use http-push: free remote_ls_ctx.dentry_name http-push: free transfer_request strbuf http-push: free transfer_request dest field http-push: free curl header lists http-push: free repo->url string http-push: clear refspecs before exiting http-walker: free fake packed_git list remote-curl: free HEAD ref with free_one_ref() http: stop leaking buffer in http_get_info_packs() http: call git_inflate_end() when releasing http_object_request http: fix leak of http_object_request struct http: fix leak when redacting cookies from curl trace transport-helper: fix leak of dummy refs_list fetch-pack: clear pack lockfiles list fetch: free "raw" string when shrinking refspec transport-helper: fix strbuf leak in push_refs_with_push() ...
This commit is contained in:
16
http.c
16
http.c
@ -800,6 +800,7 @@ static int redact_sensitive_header(struct strbuf *header, size_t offset)
|
||||
|
||||
strbuf_setlen(header, sensitive_header - header->buf);
|
||||
strbuf_addbuf(header, &redacted_header);
|
||||
strbuf_release(&redacted_header);
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
@ -2474,6 +2475,7 @@ int http_get_info_packs(const char *base_url, struct packed_git **packs_head)
|
||||
|
||||
cleanup:
|
||||
free(url);
|
||||
strbuf_release(&buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2725,6 +2727,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
|
||||
* file; also rewind to the beginning of the local file.
|
||||
*/
|
||||
if (prev_read == -1) {
|
||||
git_inflate_end(&freq->stream);
|
||||
memset(&freq->stream, 0, sizeof(freq->stream));
|
||||
git_inflate_init(&freq->stream);
|
||||
the_hash_algo->init_fn(&freq->c);
|
||||
@ -2798,7 +2801,6 @@ int finish_http_object_request(struct http_object_request *freq)
|
||||
return -1;
|
||||
}
|
||||
|
||||
git_inflate_end(&freq->stream);
|
||||
the_hash_algo->final_oid_fn(&freq->real_oid, &freq->c);
|
||||
if (freq->zret != Z_STREAM_END) {
|
||||
unlink_or_warn(freq->tmpfile.buf);
|
||||
@ -2815,15 +2817,17 @@ int finish_http_object_request(struct http_object_request *freq)
|
||||
return freq->rename;
|
||||
}
|
||||
|
||||
void abort_http_object_request(struct http_object_request *freq)
|
||||
void abort_http_object_request(struct http_object_request **freq_p)
|
||||
{
|
||||
struct http_object_request *freq = *freq_p;
|
||||
unlink_or_warn(freq->tmpfile.buf);
|
||||
|
||||
release_http_object_request(freq);
|
||||
release_http_object_request(freq_p);
|
||||
}
|
||||
|
||||
void release_http_object_request(struct http_object_request *freq)
|
||||
void release_http_object_request(struct http_object_request **freq_p)
|
||||
{
|
||||
struct http_object_request *freq = *freq_p;
|
||||
if (freq->localfile != -1) {
|
||||
close(freq->localfile);
|
||||
freq->localfile = -1;
|
||||
@ -2837,4 +2841,8 @@ void release_http_object_request(struct http_object_request *freq)
|
||||
}
|
||||
curl_slist_free_all(freq->headers);
|
||||
strbuf_release(&freq->tmpfile);
|
||||
git_inflate_end(&freq->stream);
|
||||
|
||||
free(freq);
|
||||
*freq_p = NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user