Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8166:a1f6c93afbc2 HEAD
message address parser: Set invalid_syntax=TRUE if the input is invalid.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 07 Sep 2008 17:59:22 +0300 |
parents | 459c4c496983 |
children | 99704b6b8dde |
files | src/lib-mail/message-address.c src/lib-mail/message-address.h |
diffstat | 2 files changed, 15 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/message-address.c Sun Sep 07 15:18:29 2008 +0300 +++ b/src/lib-mail/message-address.c Sun Sep 07 17:59:22 2008 +0300 @@ -264,17 +264,24 @@ 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 @@ 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; }
--- a/src/lib-mail/message-address.h Sun Sep 07 15:18:29 2008 +0300 +++ b/src/lib-mail/message-address.h Sun Sep 07 17:59:22 2008 +0300 @@ -8,6 +8,7 @@ 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