]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: istream-header-filter - Fix HEADER_FILTER_ADD_MISSING_EOH with empty input
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 13 Jun 2017 18:54:00 +0000 (21:54 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 16 Jun 2017 06:18:05 +0000 (09:18 +0300)
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)

src/lib-mail/istream-header-filter.c
src/lib-mail/test-istream-header-filter.c

index 566e04255150545d16687648aa485049eb329fc1..5d2c815175c122188886c497f7e16b180cac08f5 100644 (file)
@@ -481,6 +481,7 @@ i_stream_header_filter_seek_to_header(struct header_filter_istream *mstream,
        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 @@ i_stream_create_header_filter(struct istream *input,
        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;
index 591448b140a0f0161fdddaf82c847f506e092032..e1fb641526d2c48089f54bc6d9b7db69053e54a9 100644 (file)
@@ -498,6 +498,7 @@ static void test_istream_add_missing_eoh(void)
                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 },