Skip to content

Commit

Permalink
lib-storage: Prevent recursion in header parsing
Browse files Browse the repository at this point in the history
If header parsing error occurs and error handling tries
to get fields, such as Message-ID, it will cause
crash. This fixes problem by preventing reading from
non-cached headers while they are being parsed.

Fixes lmtp: Panic: file ../../../src/lib/array.h: line 219 (array_idx_i):
assertion failed: (idx * array->element_size < array->buffer->used)
  • Loading branch information
cmouse authored and GitLab committed Jan 10, 2017
1 parent 2599a77 commit 6b44fc7
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/lib-storage/index/index-mail-headers.c
Expand Up @@ -634,7 +634,14 @@ index_mail_get_raw_headers(struct index_mail *mail, const char *field,
_mail->seq, &field_idx, 1) <= 0) {
/* not in cache / error - first see if it's already parsed */
p_free(mail->mail.data_pool, dest);

if (mail->data.header_parser_initialized) {
/* don't try to parse headers recursively. we're here
because message size was wrong and istream-mail
wants to log some cached headers. */
i_assert(mail->lookup_abort == MAIL_LOOKUP_ABORT_NOT_IN_CACHE);
mail_set_aborted(mail);
return -1;
}
if (mail->header_seq != mail->data.seq ||
index_mail_header_is_parsed(mail, field_idx) < 0) {
/* parse */
Expand Down

0 comments on commit 6b44fc7

Please sign in to comment.