From: Timo Sirainen Date: Tue, 3 May 2016 15:25:50 +0000 (+0300) Subject: lib-mail: istream-header-filter - fixed adding headers at eoh X-Git-Tag: 2.3.0.rc1~3855 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf5682ed5399fce13b2053e20098e2de19751c59;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: istream-header-filter - fixed adding headers at eoh --- diff --git a/src/lib-mail/istream-header-filter.c b/src/lib-mail/istream-header-filter.c index f2109fca95..d772f6de86 100644 --- a/src/lib-mail/istream-header-filter.c +++ b/src/lib-mail/istream-header-filter.c @@ -199,7 +199,7 @@ static ssize_t read_header(struct header_filter_istream *mstream) if (hdr->eoh) { mstream->seen_eoh = TRUE; matched = TRUE; - if (mstream->header_parsed) { + if (mstream->header_parsed && !mstream->headers_edited) { if (mstream->eoh_not_matched) matched = !matched; } else if (mstream->callback != NULL) { diff --git a/src/lib-mail/test-istream-header-filter.c b/src/lib-mail/test-istream-header-filter.c index 9ad9ffbe5e..7d338c693d 100644 --- a/src/lib-mail/test-istream-header-filter.c +++ b/src/lib-mail/test-istream-header-filter.c @@ -260,7 +260,14 @@ edit_callback(struct header_filter_istream *input, struct message_header_line *hdr, bool *matched, void *context ATTR_UNUSED) { - if (hdr != NULL && strcasecmp(hdr->name, "To") == 0) { + if (hdr == NULL) + return; + if (hdr->eoh) { + /* add a new header */ + const char *new_hdr = "Added: header\n\n"; + i_stream_header_filter_add(input, new_hdr, strlen(new_hdr)); + *matched = FALSE; + } else if (strcasecmp(hdr->name, "To") == 0) { /* modify To header */ const char *new_to = "To: 123\n"; *matched = TRUE; @@ -271,7 +278,7 @@ edit_callback(struct header_filter_istream *input, static void test_istream_edit(void) { const char *input = "From: foo\nTo: bar\n\nhello world\n"; - const char *output = "From: foo\nTo: 123\n\nhello world\n"; + const char *output = "From: foo\nTo: 123\nAdded: header\n\nhello world\n"; struct istream *istream, *filter; test_begin("i_stream_create_header_filter(edit)");