From cd8bcf3fb7eab95f8764c0bd3dc89f6cb7dff62d Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 30 Mar 2009 23:12:44 -0400 Subject: [PATCH] Message address parser didn't handle empty group:; correctly. --HG-- branch : HEAD --- src/lib-mail/message-address.c | 40 ++++++++++++++++------------------ 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index 9bd943ce70..daac07911b 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -206,21 +206,6 @@ static int parse_mailbox(struct message_address_parser_context *ctx) return ret; } -static int parse_mailbox_list(struct message_address_parser_context *ctx) -{ - int ret; - - /* mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list */ - while ((ret = parse_mailbox(ctx)) != 0) { - if (*ctx->parser.data != ',') - break; - ctx->parser.data++; - if ((ret = rfc822_skip_lwsp(&ctx->parser)) <= 0) - break; - } - return ret; -} - static int parse_group(struct message_address_parser_context *ctx) { int ret; @@ -243,16 +228,29 @@ static int parse_group(struct message_address_parser_context *ctx) ctx->addr.mailbox = p_strdup(ctx->pool, str_c(ctx->str)); add_address(ctx); - if (ret > 0) { - if ((ret = parse_mailbox_list(ctx)) > 0) { - if (*ctx->parser.data != ';') + if (ret > 0 && *ctx->parser.data != ';') { + for (;;) { + /* mailbox-list = + (mailbox *("," mailbox)) / obs-mbox-list */ + if (parse_mailbox(ctx) <= 0) { + ret = -1; + break; + } + if (*ctx->parser.data != ',') + break; + ctx->parser.data++; + if (rfc822_skip_lwsp(&ctx->parser) <= 0) { ret = -1; - else { - ctx->parser.data++; - ret = rfc822_skip_lwsp(&ctx->parser); + break; } } } + if (*ctx->parser.data != ';') + ret = -1; + else { + ctx->parser.data++; + ret = rfc822_skip_lwsp(&ctx->parser); + } if (ret < 0) ctx->addr.invalid_syntax = TRUE; -- 2.47.3