dovecot-1.1: message address parser: Set invalid_syntax=TRUE if ...

dovecot at dovecot.org dovecot at dovecot.org
Sun Sep 7 17:59:05 EEST 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/7795c4af3481
changeset: 7857:7795c4af3481
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Sep 07 17:58:59 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 d2657188377b -r 7795c4af3481 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:58:59 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 d2657188377b -r 7795c4af3481 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:58:59 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