]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: message_address_parse*() - Replace NULs with 0x80
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 21 Apr 2018 13:34:05 +0000 (16:34 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 30 Aug 2018 08:13:15 +0000 (11:13 +0300)
Instead of truncating the strings at NULs.

src/lib-mail/message-address.c
src/lib-mail/test-message-address.c

index a9456f613cd04c7771f83531b22357f76b895d7e..f217b87a85843541770199ea88eb4e241d0b7def 100644 (file)
@@ -426,6 +426,7 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size,
        i_zero(&ctx);
 
        rfc822_parser_init(&ctx.parser, data, size, t_str_new(128));
+       ctx.parser.nul_replacement_char = RFC822_NUL_REPLACEMENT_CHAR;
        ctx.pool = pool;
        ctx.str = t_str_new(128);
        ctx.fill_missing = fill_missing;
index c0adc5dc164e8297c62506eb84ac3a6c11805040..90baac5e343e65247f2fab06b7c0cceff6418012 100644 (file)
@@ -319,6 +319,23 @@ static void test_message_address(void)
        test_end();
 }
 
+static void test_message_address_nuls(void)
+{
+       const unsigned char input[] =
+               "\"user\0nuls\"@[domain\0nuls] (comment\0nuls)";
+       const struct message_address output = {
+               NULL, "comment\x80nuls", NULL, "user\x80nuls",
+               "[domain\x80nuls]", FALSE
+       };
+       const struct message_address *addr;
+
+       test_begin("message address parsing with NULs");
+       addr = message_address_parse(pool_datastack_create(),
+                                    input, sizeof(input)-1, UINT_MAX, FALSE);
+       test_assert(addr != NULL && cmp_addr(addr, &output));
+       test_end();
+}
+
 static int
 test_parse_path(const char *input, const struct message_address **addr_r)
 {
@@ -443,6 +460,7 @@ int main(void)
 {
        static void (*const test_functions[])(void) = {
                test_message_address,
+               test_message_address_nuls,
                test_message_address_path,
                test_message_address_path_invalid,
                NULL