dovecot-1.2: message address parser: Set invalid_syntax=TRUE if ...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Sep 7 17:59:28 EEST 2008
details: http://hg.dovecot.org/dovecot-1.2/rev/a1f6c93afbc2
changeset: 8166:a1f6c93afbc2
user: Timo Sirainen <tss at iki.fi>
date: Sun Sep 07 17:59:22 2008 +0300
description:
message address parser: Set invalid_syntax=TRUE if the input is invalid.
diffstat:
2 files changed, 19 insertions(+), 10 deletions(-)
src/lib-mail/message-address.c | 28 ++++++++++++++++++----------
src/lib-mail/message-address.h | 1 +
diffs (58 lines):
diff -r 459c4c496983 -r a1f6c93afbc2 src/lib-mail/message-address.c
--- 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 @@ static int parse_address(struct message_
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 != ',')
- break;
+ 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)
- break;
- }
+ 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,
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 -r 459c4c496983 -r a1f6c93afbc2 src/lib-mail/message-address.h
--- 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 {
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
More information about the dovecot-cvs
mailing list