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