From: Timo Sirainen Date: Wed, 7 Jun 2017 12:21:10 +0000 (+0300) Subject: lib-mail: message_address_parse() - don't stop at <> when parsing address lists X-Git-Tag: 2.2.31.rc1~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4be38dbed0ce742e101dc26ebc19c63b22c10a7f;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: message_address_parse() - don't stop at <> when parsing address lists And similarly don't stop at <@domain> --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index 32c41f8e42..ce1f30575d 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -153,18 +153,25 @@ static int parse_angle_addr(struct message_address_parser_context *ctx) if (parse_domain_list(ctx) <= 0 || *ctx->parser.data != ':') { if (ctx->fill_missing) ctx->addr.route = "INVALID_ROUTE"; - return -1; + if (ctx->parser.data == ctx->parser.end) + return -1; + /* try to continue anyway */ + } else { + ctx->parser.data++; } - ctx->parser.data++; if ((ret = rfc822_skip_lwsp(&ctx->parser)) <= 0) return ret; } - if ((ret = parse_local_part(ctx)) <= 0) - return ret; - if (*ctx->parser.data == '@') { - if ((ret = parse_domain(ctx)) <= 0) + if (*ctx->parser.data == '>') { + /* <> address isn't valid */ + } else { + if ((ret = parse_local_part(ctx)) <= 0) return ret; + if (*ctx->parser.data == '@') { + if ((ret = parse_domain(ctx)) <= 0) + return ret; + } } if (*ctx->parser.data != '>')