]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: Fixed istream-header-filter when callback excluded multiple headers.
authorTimo Sirainen <tss@iki.fi>
Mon, 16 Nov 2015 12:46:40 +0000 (14:46 +0200)
committerTimo Sirainen <tss@iki.fi>
Mon, 16 Nov 2015 12:46:40 +0000 (14:46 +0200)
This only affected pop3-migration plugin.

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

index 24c5a9af3b823bda42b799fb339f8504b6ee952b..0c519a2b3360ba86e5977c8cf823c0fdd7d173c9 100644 (file)
@@ -220,7 +220,8 @@ static ssize_t read_header(struct header_filter_istream *mstream)
                                          mstream->context);
                        if (matched != orig_matched &&
                            !mstream->headers_edited) {
-                               i_array_init(&mstream->match_change_lines, 8);
+                               if (!array_is_created(&mstream->match_change_lines))
+                                       i_array_init(&mstream->match_change_lines, 8);
                                array_append(&mstream->match_change_lines,
                                             &mstream->cur_line, 1);
                        }
index d9745e7e44393f3c1dd40c94193a44cbd6609331..14eee1bbda76d0b47b3a745f0ecfb96dd746a475 100644 (file)
@@ -12,16 +12,17 @@ filter_callback(struct header_filter_istream *input ATTR_UNUSED,
                struct message_header_line *hdr,
                bool *matched, void *context ATTR_UNUSED)
 {
-       if (hdr != NULL && hdr->name_offset == 0) {
-               /* drop first header */
+       if (hdr != NULL && (hdr->name_offset == 0 ||
+                           strcmp(hdr->name, "X-Drop") == 0)) {
+               /* drop 1) first header, 2) X-Drop header */
                *matched = TRUE;
        }
 }
 
 static void test_istream_filter(void)
 {
-       static const char *exclude_headers[] = { "Subject", "To", NULL };
-       const char *input = "From: foo\nFrom: abc\nTo: bar\nSubject: plop\n\nhello world\n";
+       static const char *exclude_headers[] = { "Subject", "To", "X-Drop", NULL };
+       const char *input = "From: foo\nFrom: abc\nTo: bar\nSubject: plop\nX-Drop: 1\n\nhello world\n";
        const char *output = "From: abc\n\nhello world\n";
        struct istream *istream, *filter, *filter2;
        unsigned int i, input_len = strlen(input);