]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
pop3-migration: Convert NULs to 0x80 chars in header when hashing.
authorTimo Sirainen <tss@iki.fi>
Mon, 3 Feb 2014 15:49:03 +0000 (10:49 -0500)
committerTimo Sirainen <tss@iki.fi>
Mon, 3 Feb 2014 15:49:03 +0000 (10:49 -0500)
This should help at least with Dovecot and I think also with UW-IMAP/POP3.

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

index cf1c07bace7279b45eb94c2406cd4efb1e9632c3..0f0c77534d0a31aa7e9da40e84fdc95433d35e9e 100644 (file)
@@ -142,6 +142,17 @@ get_hdr_sha1_stream(struct mail *mail, struct istream *input, uoff_t hdr_size,
 
        sha1_init(&sha1_ctx);
        while (i_stream_read_data(input, &data, &size, 0) > 0) {
+               /* if there are NULs in header, replace them with 0x80
+                  character. This is done by at least Dovecot IMAP and also
+                  POP3 with outlook-no-nuls workaround. */
+               while ((p = memchr(data, '\0', size)) != NULL) {
+                       idx = p - data;
+                       sha1_loop(&sha1_ctx, data, idx);
+                       sha1_loop(&sha1_ctx, "\x80", 1);
+                       i_assert(size > idx);
+                       data += idx + 1;
+                       size -= idx + 1;
+               }
                sha1_loop(&sha1_ctx, data, size);
                i_stream_skip(input, size);
        }