]> granicus.if.org Git - neomutt/commitdiff
Add helper to create and populate an Address, avoid leaks in tests
authorPietro Cerutti <gahr@gahr.ch>
Mon, 20 May 2019 16:10:12 +0000 (16:10 +0000)
committerRichard Russon <rich@flatcap.org>
Thu, 23 May 2019 10:57:10 +0000 (11:57 +0100)
address/address.c
address/address.h
test/address/mutt_addr_copy.c
test/address/mutt_addrlist_append.c
test/address/mutt_addrlist_copy.c
test/address/mutt_addrlist_count_recips.c
test/address/mutt_addrlist_prepend.c

index 6c188091da2a9484ed3fddbeb89bf283b045d979..fb4352a658221b7c5693d218c25f68928eca7563 100644 (file)
@@ -387,6 +387,23 @@ struct Address *mutt_addr_new(void)
   return mutt_mem_calloc(1, sizeof(struct Address));
 }
 
+/**
+ * mutt_addr_create - Create and populate a new Address
+ * @param[in] personal The personal name for the Address (can be NULL)
+ * @param[in] mailbox The mailbox for the Address (can be NULL)
+ * @retval ptr Newly allocated Address
+ * @note The personal and mailbox values, if not NULL, are going to be copied
+ * into the newly allocated Address.
+ */
+struct Address *mutt_addr_create(const char *personal, const char *mailbox)
+{
+  struct Address *a = mutt_addr_new();
+  a->personal = mutt_str_strdup(personal);
+  a->mailbox = mutt_str_strdup(mailbox);
+  return a;
+}
+
+
 /**
  * mutt_addrlist_remove - Remove an Address from a list
  * @param[in, out] al AddressList
index 9da7da449a3f46ca9aee7c02f1b483fa1d711b84..d7fec2a9f91fe9e4c82fd8dd9f2ad8521735ee57 100644 (file)
@@ -68,6 +68,7 @@ bool            mutt_addr_valid_msgid(const char *msgid);
 /* Functions that work on a single struct Address */
 bool            mutt_addr_cmp(const struct Address *a, const struct Address *b);
 struct Address *mutt_addr_copy(const struct Address *addr);
+struct Address *mutt_addr_create(const char *personal, const char *mailbox);
 const char *    mutt_addr_for_display(const struct Address *a);
 void            mutt_addr_free(struct Address **a);
 struct Address *mutt_addr_new(void);
index 4b9284be37206e3795070be1d788b93acf793fb4..c78b3e2dda8050a4cf0c2e9dc31327019c85fd5b 100644 (file)
@@ -49,7 +49,7 @@ void test_mutt_addr_copy(void)
     TEST_CHECK(a1.group == a2->group);
     TEST_CHECK(a1.is_intl == a2->is_intl);
     TEST_CHECK(a1.intl_checked == a2->intl_checked);
-    FREE(&a2);
+    mutt_addr_free(&a2);
   }
 
   {
@@ -63,6 +63,6 @@ void test_mutt_addr_copy(void)
     TEST_CHECK(a1.group == a2->group);
     TEST_CHECK(a1.is_intl == a2->is_intl);
     TEST_CHECK(a1.intl_checked == a2->intl_checked);
-    FREE(&a2);
+    mutt_addr_free(&a2);
   }
 }
index e6eeea243994616bcc9901292c6a06bbac0176d2..e92fb746615805bd5bde98c63369f42ce18805cf 100644 (file)
@@ -45,14 +45,13 @@ void test_mutt_addrlist_append(void)
   }
 
   {
-    struct Address a1 = { .mailbox = "test@example.com" };
-    struct Address a2 = { .mailbox = "john@doe.org" };
     struct AddressList al = TAILQ_HEAD_INITIALIZER(al);
-    mutt_addrlist_append(&al, &a1);
-    mutt_addrlist_append(&al, &a2);
+    mutt_addrlist_append(&al, mutt_addr_create(NULL, "test@example.com"));
+    mutt_addrlist_append(&al, mutt_addr_create(NULL, "john@doe.org"));
     struct Address *a = TAILQ_FIRST(&al);
     TEST_CHECK_STR_EQ("test@example.com", a->mailbox);
     a = TAILQ_NEXT(a, entries);
     TEST_CHECK_STR_EQ("john@doe.org", a->mailbox);
+    mutt_addrlist_clear(&al);
   }
 }
index 1adcd67b4a827b300c360255cb9b7d425f1fcc58..7734399b2001d6cecd2f6c6f848d54e37c77d883 100644 (file)
@@ -56,21 +56,19 @@ void test_mutt_addrlist_copy(void)
   {
     struct AddressList src = TAILQ_HEAD_INITIALIZER(src);
     struct AddressList dst = TAILQ_HEAD_INITIALIZER(dst);
-    struct Address a1 = { .mailbox = "test@example.com" };
-    struct Address a2 = { .mailbox = "john@doe.org" };
-    struct Address a3 = { .mailbox = "the-who@stage.co.uk" };
-    mutt_addrlist_append(&src, &a1);
-    mutt_addrlist_append(&src, &a2);
-    mutt_addrlist_append(&src, &a3);
+    mutt_addrlist_append(&src, mutt_addr_create(NULL, "test@example.com"));
+    mutt_addrlist_append(&src, mutt_addr_create(NULL, "john@doe.org"));
+    mutt_addrlist_append(&src, mutt_addr_create(NULL, "the-who@stage.co.uk"));
     mutt_addrlist_copy(&dst, &src, false);
     TEST_CHECK(!TAILQ_EMPTY(&src));
     TEST_CHECK(!TAILQ_EMPTY(&dst));
     struct Address *adst = TAILQ_FIRST(&dst);
-    TEST_CHECK_STR_EQ(a1.mailbox, adst->mailbox);
+    TEST_CHECK_STR_EQ("test@example.com", adst->mailbox);
     adst = TAILQ_NEXT(adst, entries);
-    TEST_CHECK_STR_EQ(a2.mailbox, adst->mailbox);
+    TEST_CHECK_STR_EQ("john@doe.org", adst->mailbox);
     adst = TAILQ_NEXT(adst, entries);
-    TEST_CHECK_STR_EQ(a3.mailbox, adst->mailbox);
+    TEST_CHECK_STR_EQ("the-who@stage.co.uk", adst->mailbox);
+    mutt_addrlist_clear(&src);
     mutt_addrlist_clear(&dst);
   }
 }
index c29ace05660a7990c470ec31ab3602243de022e6..1c40a55aa9e86e00d54ed2d758b2697001610d2e 100644 (file)
@@ -44,26 +44,26 @@ void test_mutt_addrlist_count_recips(void)
     struct AddressList al = TAILQ_HEAD_INITIALIZER(al);
     mutt_addrlist_parse(&al, "test@example.com, john@doe.org");
     TEST_CHECK(mutt_addrlist_count_recips(&al) == 2);
+    mutt_addrlist_clear(&al);
   }
 
   {
     struct AddressList al = TAILQ_HEAD_INITIALIZER(al);
     mutt_addrlist_parse(&al, "test@example.com, john@doe.org");
     mutt_addrlist_append(&al, mutt_addr_new());
-    struct Address *a = mutt_addr_new();
-    a->mailbox = mutt_str_strdup("foo@bar.baz");
-    mutt_addrlist_append(&al, a);
+    mutt_addrlist_append(&al, mutt_addr_create(NULL, "foo@bar.baz"));
     TEST_CHECK(mutt_addrlist_count_recips(&al) == 3);
+    mutt_addrlist_clear(&al);
   }
 
   {
     struct AddressList al = TAILQ_HEAD_INITIALIZER(al);
     mutt_addrlist_parse(&al, "test@example.com, john@doe.org");
     mutt_addrlist_append(&al, mutt_addr_new());
-    struct Address *a = mutt_addr_new();
-    a->mailbox = mutt_str_strdup("foo@bar.baz");
+    struct Address *a = mutt_addr_create(NULL, "foo@bar.baz");
     a->group = 1;
     mutt_addrlist_append(&al, a);
     TEST_CHECK(mutt_addrlist_count_recips(&al) == 2);
+    mutt_addrlist_clear(&al);
   }
 }
index c8f58f5568679474ad1aff1796a628f217e7e1b4..8196869c68c7e48aabb4a686722880bdc592856a 100644 (file)
@@ -45,14 +45,13 @@ void test_mutt_addrlist_prepend(void)
   }
 
   {
-    struct Address a1 = { .mailbox = "test@example.com" };
-    struct Address a2 = { .mailbox = "john@doe.org" };
     struct AddressList al = TAILQ_HEAD_INITIALIZER(al);
-    mutt_addrlist_prepend(&al, &a1);
-    mutt_addrlist_prepend(&al, &a2);
+    mutt_addrlist_prepend(&al, mutt_addr_create(NULL, "test@example.com"));
+    mutt_addrlist_prepend(&al, mutt_addr_create(NULL, "john@doe.org"));
     struct Address *a = TAILQ_FIRST(&al);
     TEST_CHECK_STR_EQ("john@doe.org", a->mailbox);
     a = TAILQ_NEXT(a, entries);
     TEST_CHECK_STR_EQ("test@example.com", a->mailbox);
+    mutt_addrlist_clear(&al);
   }
 }