]> granicus.if.org Git - neomutt/commitdiff
Use AddressList in mutt_addr_cmp_strict
authorPietro Cerutti <gahr@gahr.ch>
Mon, 13 May 2019 12:25:29 +0000 (12:25 +0000)
committerRichard Russon <rich@flatcap.org>
Thu, 23 May 2019 10:57:09 +0000 (11:57 +0100)
address/address.c

index 3637a69d4f43978b4a0792a9701ee65de2b87985..1bd761aa746143d8586ec94dca03b3a5d2976a96 100644 (file)
@@ -881,21 +881,33 @@ bool mutt_addr_valid_msgid(const char *msgid)
  */
 bool mutt_addr_cmp_strict(const struct Address *a, const struct Address *b)
 {
-  while (a && b)
+  // TODO - we need to cast because mutt_addr_to_addresslist modifies its
+  // parameters to set the canary. This is a temporary precautionary measure.
+  struct AddressList *ala = mutt_addr_to_addresslist((struct Address *) a);
+  struct AddressList *alb = mutt_addr_to_addresslist((struct Address *) b);
+  struct AddressNode *ana = TAILQ_FIRST(ala);
+  struct AddressNode *anb = TAILQ_FIRST(alb);
+
+  while (ana && anb)
   {
-    if ((mutt_str_strcmp(a->mailbox, b->mailbox) != 0) ||
-        (mutt_str_strcmp(a->personal, b->personal) != 0))
+    a = ana->addr;
+    b = anb->addr;
+    if ((mutt_str_strcmp(ana->addr->mailbox, anb->addr->mailbox) != 0) ||
+        (mutt_str_strcmp(ana->addr->personal, anb->addr->personal) != 0))
     {
-      return false;
+      break;
     }
 
-    a = a->next;
-    b = b->next;
+    ana = TAILQ_NEXT(ana, entries);
+    anb = TAILQ_NEXT(anb, entries);
   }
-  if (a || b)
-    return false;
 
-  return true;
+  bool res = !(ana || anb);
+
+  FREE(&ala);
+  FREE(&alb);
+
+  return res;
 }
 
 /**