changeset 8227:eacbf71a05ff HEAD

Message address parser didn't handle empty group:; correctly.
author Timo Sirainen <tss@iki.fi>
date Mon, 30 Mar 2009 23:12:44 -0400
parents 3527035a6895
children 8b6b192498e3
files src/lib-mail/message-address.c
diffstat 1 files changed, 19 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-address.c	Thu Mar 26 18:36:36 2009 -0400
+++ b/src/lib-mail/message-address.c	Mon Mar 30 23:12:44 2009 -0400
@@ -206,21 +206,6 @@
 	return ret;
 }
 
-static int parse_mailbox_list(struct message_address_parser_context *ctx)
-{
-	int ret;
-
-	/* mailbox-list    = (mailbox *("," mailbox)) / obs-mbox-list */
-	while ((ret = parse_mailbox(ctx)) != 0) {
-		if (*ctx->parser.data != ',')
-			break;
-		ctx->parser.data++;
-		if ((ret = rfc822_skip_lwsp(&ctx->parser)) <= 0)
-			break;
-	}
-	return ret;
-}
-
 static int parse_group(struct message_address_parser_context *ctx)
 {
 	int ret;
@@ -243,16 +228,29 @@
 	ctx->addr.mailbox = p_strdup(ctx->pool, str_c(ctx->str));
 	add_address(ctx);
 
-	if (ret > 0) {
-		if ((ret = parse_mailbox_list(ctx)) > 0) {
-			if (*ctx->parser.data != ';')
+	if (ret > 0 && *ctx->parser.data != ';') {
+		for (;;) {
+			/* mailbox-list    =
+			   	(mailbox *("," mailbox)) / obs-mbox-list */
+			if (parse_mailbox(ctx) <= 0) {
 				ret = -1;
-			else {
-				ctx->parser.data++;
-				ret = rfc822_skip_lwsp(&ctx->parser);
+				break;
+			}
+			if (*ctx->parser.data != ',')
+				break;
+			ctx->parser.data++;
+			if (rfc822_skip_lwsp(&ctx->parser) <= 0) {
+				ret = -1;
+				break;
 			}
 		}
 	}
+	if (*ctx->parser.data != ';')
+		ret = -1;
+	else {
+		ctx->parser.data++;
+		ret = rfc822_skip_lwsp(&ctx->parser);
+	}
 	if (ret < 0)
 		ctx->addr.invalid_syntax = TRUE;