]> git.notmuchmail.org Git - notmuch/commitdiff
lib: Audit calls to notmuch_message_get_header to handle NULL return
authorCarl Worth <cworth@cworth.org>
Sat, 24 Apr 2010 13:46:43 +0000 (06:46 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 24 Apr 2010 13:50:04 +0000 (06:50 -0700)
Sebastian Spaeth reported [*] a segfault within libnotmuch when
running notmuch operations while an asyncronous offlineimap job had
removed some files from the mail store. Avoid this by handling all
cases where notmuch_message_get_header could return NULL.

[*] See message id:87d3xqti3o.fsf@SSpaeth.de on notmuch@notmuchmail.org

lib/thread.cc

index 1cc22acd98cbb709b4426a4b95a63c9a5b5046c5..e1da060e5158f5e1f0d8c4709645de1e6604efad 100644 (file)
@@ -84,7 +84,7 @@ _thread_add_message (notmuch_thread_t *thread,
 {
     notmuch_tags_t *tags;
     const char *tag;
-    InternetAddressList *list;
+    InternetAddressList *list = NULL;
     InternetAddress *address;
     const char *from, *author;
 
@@ -97,7 +97,9 @@ _thread_add_message (notmuch_thread_t *thread,
                         message);
 
     from = notmuch_message_get_header (message, "from");
-    list = internet_address_list_parse_string (from);
+    if (from)
+       list = internet_address_list_parse_string (from);
+
     if (list) {
        address = internet_address_list_get_address (list, 0);
        if (address) {
@@ -115,7 +117,7 @@ _thread_add_message (notmuch_thread_t *thread,
     if (! thread->subject) {
        const char *subject;
        subject = notmuch_message_get_header (message, "subject");
-       thread->subject = talloc_strdup (thread, subject);
+       thread->subject = talloc_strdup (thread, subject ? subject : "");
     }
 
     for (tags = notmuch_message_get_tags (message);
@@ -135,6 +137,8 @@ _thread_set_subject_from_message (notmuch_thread_t *thread,
     const char *cleaned_subject;
 
     subject = notmuch_message_get_header (message, "subject");
+    if (! subject)
+       return;
 
     if ((strncasecmp (subject, "Re: ", 4) == 0) ||
        (strncasecmp (subject, "Aw: ", 4) == 0) ||