]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: message_address_parse() - Add INVALID_ROUTE/SYNTAX_ERROR only if fill_missi...
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 7 Jun 2017 09:58:21 +0000 (12:58 +0300)
committerGitLab <gitlab@git.dovecot.net>
Wed, 7 Jun 2017 15:33:55 +0000 (18:33 +0300)
This allows message_address_write() to write the parsed invalid address in a
way that at least somewhat resembles the original input.

src/lib-mail/message-address.c
src/lib-mail/test-message-address.c

index d497ddbe7e50df6d66077a770b358371b7007e43..c5239823eddd0429bd8cb386be932625c094625d 100644 (file)
@@ -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;
index aa3188557d13b6e8005ef5f6c3b5aa72d476bd5d..b0d0d498b6c984f7e2070ca80762fb712fe3976e 100644 (file)
@@ -26,6 +26,8 @@ static void test_message_address(void)
                  { 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>",