From 051037440ab7b8a8cff6fb5ad222a0a78c731f86 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 9 Jan 2018 11:33:59 -0500 Subject: [PATCH] lib-mail: Refactor code to make the next commit smaller --- src/lib-mail/message-address.c | 4 ++-- src/lib-mail/message-id.c | 30 +++++++++++++----------------- src/lib-mail/message-parser.c | 5 ++--- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index 88d638a42a..afeef88966 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -400,9 +400,9 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size, if (rfc822_skip_lwsp(&ctx.parser) <= 0) { /* no addresses */ - return NULL; + } else { + (void)parse_address_list(&ctx, max_addresses); } - (void)parse_address_list(&ctx, max_addresses); return ctx.first_addr; } diff --git a/src/lib-mail/message-id.c b/src/lib-mail/message-id.c index d6aa357143..772535b12e 100644 --- a/src/lib-mail/message-id.c +++ b/src/lib-mail/message-id.c @@ -9,6 +9,7 @@ static bool get_untokenized_msgid(const char **msgid_p, string_t *msgid) { struct rfc822_parser_context parser; int ret; + bool success = FALSE; rfc822_parser_init(&parser, (const unsigned char *)*msgid_p, strlen(*msgid_p), NULL); @@ -27,23 +28,18 @@ static bool get_untokenized_msgid(const char **msgid_p, string_t *msgid) ret = rfc822_parse_quoted_string(&parser, msgid); else ret = rfc822_parse_dot_atom(&parser, msgid); - if (ret <= 0) - return FALSE; - - if (*parser.data != '@') - return FALSE; - str_append_c(msgid, '@'); - parser.data++; - rfc822_skip_lwsp(&parser); - - if (rfc822_parse_dot_atom(&parser, msgid) <= 0) - return FALSE; - - if (*parser.data != '>') - return FALSE; - - *msgid_p = (const char *)parser.data + 1; - return TRUE; + if (ret > 0 && *parser.data == '@') { + str_append_c(msgid, '@'); + parser.data++; + rfc822_skip_lwsp(&parser); + + if (rfc822_parse_dot_atom(&parser, msgid) > 0 && + *parser.data == '>') { + *msgid_p = (const char *)parser.data + 1; + success = TRUE; + } + } + return success; } static void strip_lwsp(char *str) diff --git a/src/lib-mail/message-parser.c b/src/lib-mail/message-parser.c index 8caf7d8ff6..b95448a329 100644 --- a/src/lib-mail/message-parser.c +++ b/src/lib-mail/message-parser.c @@ -499,9 +499,8 @@ static void parse_content_type(struct message_parser_ctx *ctx, ctx->part->flags |= MESSAGE_PART_FLAG_MULTIPART_DIGEST; } - if (ret < 0) - return; - if ((ctx->part->flags & MESSAGE_PART_FLAG_MULTIPART) == 0 || + if (ret < 0 || + (ctx->part->flags & MESSAGE_PART_FLAG_MULTIPART) == 0 || ctx->last_boundary != NULL) return;