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