]> 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)
committerGitLab <gitlab@git.dovecot.net>
Wed, 14 Jun 2017 13:41:29 +0000 (16:41 +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 f034cb91acf61c21caa8fb0c06b3f57683113e98..a4ed1c3b50f15f09325f0318261523904f2fcbc4 100644 (file)
@@ -480,6 +480,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)
@@ -663,6 +664,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 da890a7bdc3d8f4b0a3c49e77238cf294ce40eb2..f7dcbff7cc7280ccd3dbe97287030ad09f942df0 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 },