From: Timo Sirainen Date: Tue, 6 Mar 2018 10:14:25 +0000 (+0200) Subject: lib-mail: message_address_write() - don't crash with NULL address X-Git-Tag: 2.3.9~2163 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8762b54cbfb0ac0c4dba788244a1070ddd1c7bcb;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: message_address_write() - don't crash with NULL address message_address_parse() can return NULL on empty address, so writing it should produce empty address as well. Broken by 15581297511b658a29c707c6031a258bab7bf1a5 --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index d9ab110a68..172a707d49 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -470,6 +470,9 @@ void message_address_write(string_t *str, const struct message_address *addr) const char *tmp; bool first = TRUE, in_group = FALSE; + if (addr == NULL) + return; + /* <> path */ if (addr->mailbox == NULL && addr->domain == NULL) { i_assert(addr->next == NULL); diff --git a/src/lib-mail/test-message-address.c b/src/lib-mail/test-message-address.c index e0057fd9db..c1b5566d91 100644 --- a/src/lib-mail/test-message-address.c +++ b/src/lib-mail/test-message-address.c @@ -311,6 +311,13 @@ static void test_message_address(void) cmp_addr(addr, &group_suffix)); test_assert(strcmp(str_c(str), "group:;") == 0); test_end(); + + test_begin("message address parsing empty string"); + test_assert(message_address_parse(unsafe_data_stack_pool, &uchar_nul, 0, 10, TRUE) == NULL); + str_truncate(str, 0); + message_address_write(str, NULL); + test_assert(str_len(str) == 0); + test_end(); } static int