changeset 22168:fb24444dd968

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.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 07 Jun 2017 12:58:21 +0300
parents 15ca457e629d
children 1c7f10f84fa2
files src/lib-mail/message-address.c src/lib-mail/test-message-address.c
diffstat 2 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-address.c	Wed Jun 07 12:42:28 2017 +0300
+++ b/src/lib-mail/message-address.c	Wed Jun 07 12:58:21 2017 +0300
@@ -151,7 +151,8 @@
 
 	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 @@
 	}
 	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;
--- a/src/lib-mail/test-message-address.c	Wed Jun 07 12:42:28 2017 +0300
+++ b/src/lib-mail/test-message-address.c	Wed Jun 07 12:58:21 2017 +0300
@@ -26,6 +26,8 @@
 		  { NULL, NULL, NULL, "user", "domain", FALSE } },
 		{ "<user@domain>", NULL,
 		  { NULL, NULL, NULL, "user", "domain", FALSE } },
+		{ "<@route>", "<@route:\"\">",
+		  { NULL, NULL, "@route", "", "", TRUE } },
 		{ "<\"\"@domain>", "<\"\"@domain>",
 		  { NULL, NULL, NULL, "", "domain", FALSE } },
 		{ "foo bar <user@domain>", "\"foo bar\" <user@domain>",