Mercurial > dovecot > core-2.2
changeset 22225:e3ebc1be3d49
lib-mail: istream-header-filter - Fix HEADER_FILTER_ADD_MISSING_EOH with empty input
The result for "" should be "\n", not "\n\n". The second "\n" would belong
to the mail body.
This fixes calculating hashes for incremental dsync when mail didn't have
Date or Message-ID headers, resulting in e.g.:
Warning: Deleting mailbox 'INBOX': UID=1 already exists locally for a different mail: Headers hashes don't match (e1c06d85ae7b8b032bef47e42e4c08f9 vs 68b329da9893e34099c7d8ad5cb9c940)
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 13 Jun 2017 21:54:00 +0300 |
parents | dc1996f95c89 |
children | 56719ee6447a |
files | src/lib-mail/istream-header-filter.c src/lib-mail/test-istream-header-filter.c |
diffstat | 2 files changed, 3 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/istream-header-filter.c Wed Jun 14 03:21:19 2017 +0300 +++ b/src/lib-mail/istream-header-filter.c Tue Jun 13 21:54:00 2017 +0300 @@ -481,6 +481,7 @@ mstream->prev_matched = FALSE; mstream->header_read = FALSE; mstream->seen_eoh = FALSE; + mstream->last_added_newline = TRUE; } static int skip_header(struct header_filter_istream *mstream) @@ -664,6 +665,7 @@ mstream->end_body_with_lf = (flags & HEADER_FILTER_END_BODY_WITH_LF) != 0; mstream->last_lf_offset = (uoff_t)-1; + mstream->last_added_newline = TRUE; mstream->istream.iostream.destroy = i_stream_header_filter_destroy; mstream->istream.read = i_stream_header_filter_read;
--- a/src/lib-mail/test-istream-header-filter.c Wed Jun 14 03:21:19 2017 +0300 +++ b/src/lib-mail/test-istream-header-filter.c Tue Jun 13 21:54:00 2017 +0300 @@ -498,6 +498,7 @@ const char *output; unsigned int extra; } tests[] = { + { "", "\n", 0 }, { "From: foo", "From: foo\n\n", 1 }, { "From: foo\n", "From: foo\n\n", 1 }, { "From: foo\n\n", "From: foo\n\n", 1 },