dovecot-1.2: Message address parser didn't handle empty group:; ...

dovecot at dovecot.org dovecot at dovecot.org
Tue Mar 31 06:12:55 EEST 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/e5658894cd13
changeset: 8877:e5658894cd13
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Mar 30 23:12:44 2009 -0400
description:
Message address parser didn't handle empty group:; correctly.

diffstat:

1 file changed, 21 insertions(+), 23 deletions(-)
src/lib-mail/message-address.c |   44 +++++++++++++++++++---------------------

diffs (62 lines):

diff -r 88aeadb32151 -r e5658894cd13 src/lib-mail/message-address.c
--- a/src/lib-mail/message-address.c	Mon Mar 30 20:27:14 2009 -0400
+++ b/src/lib-mail/message-address.c	Mon Mar 30 23:12:44 2009 -0400
@@ -206,21 +206,6 @@ static int parse_mailbox(struct message_
 	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,15 +228,28 @@ static int parse_group(struct message_ad
 	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;


More information about the dovecot-cvs mailing list