mirror of
https://github.com/git/git.git
synced 2024-10-28 04:49:43 +01:00
mailinfo: fix leaking header data
We populate the `mailinfo` arrays `p_hdr_data` and `s_hdr_data` with data parsed from the mail headers. These arrays may end up being only partially populated with gaps in case some of the headers do not parse properly. This causes memory leaks because `strbuf_list_free()` will stop iterating once it hits the first `NULL` pointer in the backing array. Fix this by open-coding a variant of `strbuf_list_free()` that knows to iterate through all headers. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2df380c280
commit
e5530f9c5c
2 changed files with 16 additions and 2 deletions
17
mailinfo.c
17
mailinfo.c
|
@ -1290,8 +1290,21 @@ void clear_mailinfo(struct mailinfo *mi)
|
|||
strbuf_release(&mi->inbody_header_accum);
|
||||
free(mi->message_id);
|
||||
|
||||
strbuf_list_free(mi->p_hdr_data);
|
||||
strbuf_list_free(mi->s_hdr_data);
|
||||
for (size_t i = 0; header[i]; i++) {
|
||||
if (!mi->p_hdr_data[i])
|
||||
continue;
|
||||
strbuf_release(mi->p_hdr_data[i]);
|
||||
free(mi->p_hdr_data[i]);
|
||||
}
|
||||
free(mi->p_hdr_data);
|
||||
|
||||
for (size_t i = 0; header[i]; i++) {
|
||||
if (!mi->s_hdr_data[i])
|
||||
continue;
|
||||
strbuf_release(mi->s_hdr_data[i]);
|
||||
free(mi->s_hdr_data[i]);
|
||||
}
|
||||
free(mi->s_hdr_data);
|
||||
|
||||
while (mi->content < mi->content_top) {
|
||||
free(*(mi->content_top));
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
test_description='git mailinfo and git mailsplit test'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
DATA="$TEST_DIRECTORY/t5100"
|
||||
|
|
Loading…
Reference in a new issue