From: Timo Sirainen Date: Sat, 21 Apr 2018 13:34:05 +0000 (+0300) Subject: lib-mail: message_address_parse*() - Replace NULs with 0x80 X-Git-Tag: 2.3.4~255 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=102735b46f6c3ecfb76aa4f5ba64a78e167910a3;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: message_address_parse*() - Replace NULs with 0x80 Instead of truncating the strings at NULs. --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index a9456f613c..f217b87a85 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -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; diff --git a/src/lib-mail/test-message-address.c b/src/lib-mail/test-message-address.c index c0adc5dc16..90baac5e34 100644 --- a/src/lib-mail/test-message-address.c +++ b/src/lib-mail/test-message-address.c @@ -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