procmime.c procmime_parse_multipart() fix leak

- additional_header was not freed in every code path.
- Also no need to allocate it at the beginning
This commit is contained in:
gfgit 2023-08-31 15:50:06 +02:00
parent 51feaad261
commit 816211e894
1 changed files with 10 additions and 4 deletions

View File

@ -1746,7 +1746,7 @@ static void procmime_parse_multipart(MimeInfo *mimeinfo, gboolean short_scan)
int result = 0;
gboolean start_found = FALSE;
gboolean end_found = FALSE;
GPtrArray *additional_headers = g_ptr_array_new();
GPtrArray *additional_headers = NULL;
boundary = g_hash_table_lookup(mimeinfo->typeparameters, "boundary");
if (!boundary)
@ -1784,9 +1784,9 @@ static void procmime_parse_multipart(MimeInfo *mimeinfo, gboolean short_scan)
hentry[4].body, hentry[5].body,
mimeinfo->data.filename, lastoffset,
len);
if (g_hash_table_lookup(childinfo->typeparameters, "protected-headers")) {
if (additional_headers && g_hash_table_lookup(childinfo->typeparameters, "protected-headers")) {
for (int i = 0; i < additional_headers->len; i ++ ) {
Header *hdr = g_ptr_array_index(additional_headers,i);
Header *hdr = g_ptr_array_steal_index(additional_headers,i);
procmime_mimeinfo_add_extra_header(childinfo, hdr);
}
g_ptr_array_free(additional_headers, TRUE);
@ -1812,12 +1812,18 @@ static void procmime_parse_multipart(MimeInfo *mimeinfo, gboolean short_scan)
g_free(curheader->body);
curheader->body = NULL;
}
additional_headers = g_ptr_array_new();
if(additional_headers)
g_ptr_array_free(additional_headers, TRUE);
additional_headers = g_ptr_array_new_with_free_func(procheader_header_free);
procheader_get_all_header_fields(fp, hentry, additional_headers);
FILL_HEADERS();
lastoffset = ftell(fp);
}
}
if(additional_headers)
g_ptr_array_free(additional_headers, TRUE);
if (start_found && !end_found && lastoffset != -1) {
gint len = (ftell(fp) - strlen(buf)) - lastoffset - 1;