]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
pop3-migration: Strip trailing spaces from headers when calculating hash
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 12 Jun 2017 11:24:59 +0000 (14:24 +0300)
committerGitLab <gitlab@git.dovecot.net>
Mon, 12 Jun 2017 12:44:36 +0000 (15:44 +0300)
Fixes matching mails with Zimbra.

src/plugins/pop3-migration/pop3-migration-plugin.c
src/plugins/pop3-migration/test-pop3-migration-plugin.c

index 802b5df68616c92e4709e3b131c9f645af076f18..01f2a07d0c931e20c0399753fb89e847ea646575 100644 (file)
@@ -168,7 +168,21 @@ pop3_header_filter_callback(struct header_filter_istream *input ATTR_UNUSED,
                        /* Yahoo IMAP drops headers with invalid names, while
                           Yahoo POP3 preserves them. Drop them all. */
                        *matched = TRUE;
-               }
+               } else if (hdr->value_len > 0 &&
+                          hdr->value[hdr->value_len-1] == ' ') T_BEGIN {
+                       /* Delete trailing whitespace. Zimbra is stripping it
+                          away with BODY[HEADER]. */
+                       struct message_header_line new_hdr = *hdr;
+                       while (new_hdr.value_len > 0 &&
+                              new_hdr.value[new_hdr.value_len-1] == ' ')
+                               new_hdr.value_len--;
+                       new_hdr.crlf_newline = FALSE; /* CRs are stripped */
+                       string_t *new_line = t_str_new(128);
+                       message_header_line_write(new_line, &new_hdr);
+                       i_stream_header_filter_add(input, str_data(new_line),
+                                                  str_len(new_line));
+                       *matched = TRUE;
+               } T_END;
        }
 }
 
index 9a3454add00ffd4eb353f7d394fd24de9ed7a449..ea32aa746539d20eaccc83c251ed3fab9f533bc1 100644 (file)
@@ -17,6 +17,9 @@ static void test_pop3_migration_get_hdr_sha1(void)
                { "", "da39a3ee5e6b4b0d3255bfef95601890afd80709", FALSE },
                { "\n", "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc", TRUE },
                { "a: b\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+               { "a: b \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+               { "a: b  \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+               { "a: b     \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
                { "a: b\r\n\r\n", "d14841695e1d9e2de6625d9222abd149ec821b0d", TRUE },
                { "a: b\r\n\r\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
                { "a: b\r\n\r\r\nc: d\r\n\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", TRUE }