From: Timo Sirainen Date: Sun, 7 Sep 2008 14:59:22 +0000 (+0300) Subject: message address parser: Set invalid_syntax=TRUE if the input is invalid. X-Git-Tag: 1.2.alpha2~82 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88b8c5db9f66bdbb70d274d8592947716f364c36;p=thirdparty%2Fdovecot%2Fcore.git message address parser: Set invalid_syntax=TRUE if the input is invalid. --HG-- branch : HEAD --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index c3cfbc747a..4a335a5cfc 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -264,17 +264,24 @@ static int parse_address(struct message_address_parser_context *ctx) return ret; } -static void parse_address_list(struct message_address_parser_context *ctx, - unsigned int max_addresses) +static int parse_address_list(struct message_address_parser_context *ctx, + unsigned int max_addresses) { + int ret = 0; + /* address-list = (address *("," address)) / obs-addr-list */ - while (max_addresses-- > 0 && parse_address(ctx) > 0) { - if (*ctx->parser.data != ',') + while (max_addresses-- > 0) { + if ((ret = parse_address(ctx)) <= 0) + break; + if (*ctx->parser.data != ',') { + ret = -1; break; + } ctx->parser.data++; - if (rfc822_skip_lwsp(&ctx->parser) <= 0) + if ((ret = rfc822_skip_lwsp(&ctx->parser)) <= 0) break; } + return ret; } static struct message_address * @@ -292,7 +299,8 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size, rfc822_skip_lwsp(&ctx.parser); - (void)parse_address_list(&ctx, max_addresses); + if (parse_address_list(&ctx, max_addresses) < 0) + ctx.first_addr->invalid_syntax = TRUE; return ctx.first_addr; } diff --git a/src/lib-mail/message-address.h b/src/lib-mail/message-address.h index 0b32cfe58d..2769c58d52 100644 --- a/src/lib-mail/message-address.h +++ b/src/lib-mail/message-address.h @@ -8,6 +8,7 @@ struct message_address { struct message_address *next; const char *name, *route, *mailbox, *domain; + bool invalid_syntax; }; /* Parse message addresses from given data. If fill_missing is TRUE, missing