dovecot-2.0: message_address_write() wrote extra @ if route was ...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jun 1 07:42:13 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/fa17414cfe77
changeset: 9423:fa17414cfe77
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jun 01 00:29:53 2009 -0400
description:
message_address_write() wrote extra @ if route was specified.

diffstat:

3 files changed, 54 insertions(+), 32 deletions(-)
src/lib-mail/message-address.c      |    1 
src/lib-mail/message-address.h      |    9 +++-
src/lib-mail/test-message-address.c |   76 +++++++++++++++++++++--------------

diffs (148 lines):

diff -r c0821048c517 -r fa17414cfe77 src/lib-mail/message-address.c
--- a/src/lib-mail/message-address.c	Sun May 31 22:41:22 2009 -0400
+++ b/src/lib-mail/message-address.c	Mon Jun 01 00:29:53 2009 -0400
@@ -386,7 +386,6 @@ void message_address_write(string_t *str
 			}
 			str_append_c(str, '<');
 			if (addr->route != NULL) {
-				str_append_c(str, '@');
 				str_append(str, addr->route);
 				str_append_c(str, ':');
 			}
diff -r c0821048c517 -r fa17414cfe77 src/lib-mail/message-address.h
--- a/src/lib-mail/message-address.h	Sun May 31 22:41:22 2009 -0400
+++ b/src/lib-mail/message-address.h	Mon Jun 01 00:29:53 2009 -0400
@@ -7,7 +7,14 @@ struct message_address {
 struct message_address {
 	struct message_address *next;
 
-	const char *name, *route, *mailbox, *domain;
+	/* display-name */
+	const char *name;
+	/* route string contains the @ prefix */
+	const char *route;
+	/* local-part */
+	const char *mailbox;
+	const char *domain;
+	/* there were errors when parsing this address */
 	bool invalid_syntax;
 };
 
diff -r c0821048c517 -r fa17414cfe77 src/lib-mail/test-message-address.c
--- a/src/lib-mail/test-message-address.c	Sun May 31 22:41:22 2009 -0400
+++ b/src/lib-mail/test-message-address.c	Mon Jun 01 00:29:53 2009 -0400
@@ -18,16 +18,16 @@ static void test_message_address(void)
 static void test_message_address(void)
 {
 	static const char *input[] = {
-		"user at domain",
-		"<user at domain>",
-		"foo bar <user at domain>",
-		"\"foo bar\" <user at domain>",
-		"<@route:user at domain>",
-		"<@route at route2:user at domain>",
-		"hello <@route , at route2:user at domain>",
-		"user (hello)",
-		"hello <user>",
-		"@domain"
+		"user at domain", NULL,
+		"<user at domain>", "user at domain",
+		"foo bar <user at domain>", NULL,
+		"\"foo bar\" <user at domain>", "foo bar <user at domain>",
+		"<@route:user at domain>", NULL,
+		"<@route at route2:user at domain>", "<@route, at route2:user at domain>",
+		"hello <@route , at route2:user at domain>", "hello <@route, at route2:user at domain>",
+		"user (hello)", NULL,
+		"hello <user>", NULL,
+		"@domain", NULL
 	};
 	static struct message_address group_prefix = {
 		NULL, NULL, NULL, "group", NULL, FALSE
@@ -48,51 +48,67 @@ static void test_message_address(void)
 		{ NULL, NULL, NULL, "", "domain", TRUE }
 	};
 	struct message_address *addr;
-	string_t *group;
+	string_t *str, *group;
+	const char *wanted_string;
 	unsigned int i;
-	bool success;
 
+	i_assert(N_ELEMENTS(input) == N_ELEMENTS(output)*2);
+
+	test_begin("message address parsing");
+	str = t_str_new(128);
 	group = t_str_new(256);
 	str_append(group, "group: ");
 
-	for (i = 0; i < N_ELEMENTS(input); i++) {
+	for (i = 0; i < N_ELEMENTS(output); i++) {
 		addr = message_address_parse(pool_datastack_create(),
-					     (const unsigned char *)input[i],
-					     strlen(input[i]), -1U, FALSE);
-		success = addr != NULL && addr->next == NULL &&
-			cmp_addr(addr, &output[i]);
-		test_out(t_strdup_printf("message_address_parse(%d)", i),
-			 success);
+					     (const unsigned char *)input[i*2],
+					     strlen(input[i*2]), -1U, FALSE);
+		test_assert(addr != NULL && addr->next == NULL &&
+			    cmp_addr(addr, &output[i]));
 
 		if (!output[i].invalid_syntax) {
+			str_truncate(str, 0);
+			message_address_write(str, addr);
+			wanted_string = input[i*2+1] != NULL ?
+				input[i*2+1] : input[i*2];
+			test_assert(strcmp(str_c(str), wanted_string) == 0);
 			if (i != 0) {
 				if ((i % 2) == 0)
 					str_append(group, ",");
 				else
 					str_append(group, " , \n ");
 			}
-			str_append(group, input[i]);
+			str_append(group, input[i*2]);
 		}
 	}
 	str_append_c(group, ';');
+	test_end();
 
+	test_begin("message address parsing with groups");
 	addr = message_address_parse(pool_datastack_create(), str_data(group),
 				     str_len(group), -1U, FALSE);
-	success = addr != NULL && cmp_addr(addr, &group_prefix);
+	test_assert(addr != NULL && cmp_addr(addr, &group_prefix));
 	addr = addr->next;
-	for (i = 0; i < N_ELEMENTS(input) && addr != NULL; i++) {
+	for (i = 0; i < N_ELEMENTS(output) && addr != NULL; i++) {
 		if (output[i].invalid_syntax)
 			continue;
-		if (!cmp_addr(addr, &output[i])) {
-			success = FALSE;
-			break;
-		}
+		test_assert(cmp_addr(addr, &output[i]));
 		addr = addr->next;
 	}
-	if (addr == NULL || addr->next != NULL ||
-	    !cmp_addr(addr, &group_suffix))
-		success = FALSE;
-	test_out("message_address_parse(group)", success);
+	test_assert(addr != NULL && addr->next == NULL &&
+		    cmp_addr(addr, &group_suffix));
+	test_end();
+
+	test_begin("message address parsing with empty group");
+	str_truncate(group, 0);
+	str_append(group, "group:;");
+	addr = message_address_parse(pool_datastack_create(), str_data(group),
+				     str_len(group), -1U, FALSE);
+	test_assert(addr != NULL && cmp_addr(addr, &group_prefix));
+	addr = addr->next;
+	test_assert(addr != NULL && addr->next == NULL &&
+		    cmp_addr(addr, &group_suffix));
+	test_end();
 }
 
 int main(void)


More information about the dovecot-cvs mailing list