[balsa] address-book-rubrica: Do not crash on bad card



commit 156e9fd830ba6ad043eb0afaf35e27d97ca5737d
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Sat Jun 22 21:21:55 2019 -0400

    address-book-rubrica: Do not crash on bad card
    
    Do not crash if a card has multiple "Net" sections.
    
    * libbalsa/address-book-rubrica.c (extract_cards): Ignore all
      but the first non-empty "Net" section.
    
    If we call libbalsa_address_set_addr_list() and then call it again with
    either the same list or an extended list, we free all the e-mail
    addresses from the first call, and then free the list before setting it.
    Only bad things can follow!

 ChangeLog                       | 8 ++++++++
 libbalsa/address-book-rubrica.c | 3 ++-
 2 files changed, 10 insertions(+), 1 deletion(-)
---
diff --git a/ChangeLog b/ChangeLog
index c4ccbb4ad..c53845b91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-06-22  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       address-book-rubrica: Do not crash if a card has multiple "Net"
+       sections.
+
+       * libbalsa/address-book-rubrica.c (extract_cards): Ignore all
+       but the first "Net" section.
+
 2019-06-22  Peter Bloomfield  <pbloomfield bellsouth net>
 
        * libbalsa/address-book-rubrica.c
diff --git a/libbalsa/address-book-rubrica.c b/libbalsa/address-book-rubrica.c
index 79e0bb121..b260fc492 100644
--- a/libbalsa/address-book-rubrica.c
+++ b/libbalsa/address-book-rubrica.c
@@ -592,7 +592,8 @@ extract_cards(xmlNodePtr card)
                    extract_work(children->children, &organization);
                     libbalsa_address_set_organization(address, organization);
                     g_free(organization);
-                } else if (!xmlStrcmp(children->name, CXMLCHARP("Net"))) {
+                } else if (!xmlStrcmp(children->name, CXMLCHARP("Net"))
+                           && address_list == NULL) {
                    extract_net(children->children, &address_list);
                     libbalsa_address_set_addr_list(address, address_list);
                 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]