From: Timo Sirainen Date: Wed, 7 Jun 2017 09:58:21 +0000 (+0300) Subject: lib-mail: message_address_parse() - Add INVALID_ROUTE/SYNTAX_ERROR only if fill_missi... X-Git-Tag: 2.3.0.rc1~1494 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=58a770f1e0ab553a0dba9cad9d6f3a6cdf2dc855;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: message_address_parse() - Add INVALID_ROUTE/SYNTAX_ERROR only if fill_missing==TRUE This allows message_address_write() to write the parsed invalid address in a way that at least somewhat resembles the original input. --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index d497ddbe7e..c5239823ed 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -151,7 +151,8 @@ static int parse_angle_addr(struct message_address_parser_context *ctx) if (*ctx->parser.data == '@') { if (parse_domain_list(ctx) <= 0 || *ctx->parser.data != ':') { - ctx->addr.route = "INVALID_ROUTE"; + if (ctx->fill_missing) + ctx->addr.route = "INVALID_ROUTE"; return -1; } ctx->parser.data++; @@ -191,7 +192,8 @@ static int parse_name_addr(struct message_address_parser_context *ctx) } if (parse_angle_addr(ctx) < 0) { /* broken */ - ctx->addr.domain = "SYNTAX_ERROR"; + if (ctx->fill_missing) + ctx->addr.domain = "SYNTAX_ERROR"; ctx->addr.invalid_syntax = TRUE; } return ctx->parser.data != ctx->parser.end ? 1 : 0; diff --git a/src/lib-mail/test-message-address.c b/src/lib-mail/test-message-address.c index aa3188557d..b0d0d498b6 100644 --- a/src/lib-mail/test-message-address.c +++ b/src/lib-mail/test-message-address.c @@ -26,6 +26,8 @@ static void test_message_address(void) { NULL, NULL, NULL, "user", "domain", FALSE } }, { "", NULL, { NULL, NULL, NULL, "user", "domain", FALSE } }, + { "<@route>", "<@route:\"\">", + { NULL, NULL, "@route", "", "", TRUE } }, { "<\"\"@domain>", "<\"\"@domain>", { NULL, NULL, NULL, "", "domain", FALSE } }, { "foo bar ", "\"foo bar\" ",