From 9f2fe2782224266bf2a403f430de011cf3b9da9d Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 6 Mar 2018 12:14:25 +0200 Subject: [PATCH] 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 --- src/lib-mail/message-address.c | 10 ++++++++++ src/lib-mail/test-message-address.c | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index 4d4cfdadba..77192d6254 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -430,6 +430,16 @@ 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); + str_append(str, "<>"); + return; + } + /* a) mailbox@domain b) name <@route:mailbox@domain> c) group: .. ; */ diff --git a/src/lib-mail/test-message-address.c b/src/lib-mail/test-message-address.c index aa0f8b4641..a6f5e5e315 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(); } int main(void)