]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
message_address_write() wrote extra @ if route was specified.
authorTimo Sirainen <tss@iki.fi>
Mon, 1 Jun 2009 04:29:53 +0000 (00:29 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 1 Jun 2009 04:29:53 +0000 (00:29 -0400)
--HG--
branch : HEAD

src/lib-mail/message-address.c
src/lib-mail/message-address.h
src/lib-mail/test-message-address.c

index daac07911bd6701a3b95998cfdfde3ef7c3b0f57..527f65f28702c11293a2ccf1cb91490d6953aa41 100644 (file)
@@ -386,7 +386,6 @@ void message_address_write(string_t *str, const struct message_address *addr)
                        }
                        str_append_c(str, '<');
                        if (addr->route != NULL) {
-                               str_append_c(str, '@');
                                str_append(str, addr->route);
                                str_append_c(str, ':');
                        }
index 2769c58d52579de150f9bca2c490287a5720e12e..c98aa313e0fe531387fc48f5d876ef4405bd301f 100644 (file)
@@ -7,7 +7,14 @@
 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;
 };
 
index cd7b0a2bb0dcca96a662114d688f35b610d8e7ae..13f45661ff5ebef3a5b6db87e16a28f147615a5a 100644 (file)
@@ -18,16 +18,16 @@ static bool cmp_addr(const struct message_address *a1,
 static void test_message_address(void)
 {
        static const char *input[] = {
-               "user@domain",
-               "<user@domain>",
-               "foo bar <user@domain>",
-               "\"foo bar\" <user@domain>",
-               "<@route:user@domain>",
-               "<@route@route2:user@domain>",
-               "hello <@route ,@route2:user@domain>",
-               "user (hello)",
-               "hello <user>",
-               "@domain"
+               "user@domain", NULL,
+               "<user@domain>", "user@domain",
+               "foo bar <user@domain>", NULL,
+               "\"foo bar\" <user@domain>", "foo bar <user@domain>",
+               "<@route:user@domain>", NULL,
+               "<@route@route2:user@domain>", "<@route,@route2:user@domain>",
+               "hello <@route ,@route2:user@domain>", "hello <@route,@route2:user@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)