Mercurial > dovecot > original-hg > dovecot-1.1
changeset 8227:eacbf71a05ff HEAD
Message address parser didn't handle empty group:; correctly.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 30 Mar 2009 23:12:44 -0400 |
parents | 3527035a6895 |
children | 8b6b192498e3 |
files | src/lib-mail/message-address.c |
diffstat | 1 files changed, 19 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/message-address.c Thu Mar 26 18:36:36 2009 -0400 +++ b/src/lib-mail/message-address.c Mon Mar 30 23:12:44 2009 -0400 @@ -206,21 +206,6 @@ 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 @@ 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; - else { - ctx->parser.data++; - ret = rfc822_skip_lwsp(&ctx->parser); + break; + } + if (*ctx->parser.data != ',') + break; + ctx->parser.data++; + if (rfc822_skip_lwsp(&ctx->parser) <= 0) { + ret = -1; + 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;