]> git.notmuchmail.org Git - notmuch/blobdiff - lib/message.cc
Avoid access of a Xapian iterator's object when there's nothing there.
[notmuch] / lib / message.cc
index cb9026439b75647486e4e2b3953da53a8b924e2f..41dddd077ea9939d703e95f0606dc1bfc023f053 100644 (file)
@@ -146,7 +146,7 @@ _notmuch_message_create (const void *talloc_owner,
 }
 
 /* Create a new notmuch_message_t object for a specific message ID,
- * (which may or may not already exist in the databas).
+ * (which may or may not already exist in the database).
  *
  * The 'notmuch' database will be the talloc owner of the returned
  * message.
@@ -285,7 +285,8 @@ _notmuch_message_get_in_reply_to (notmuch_message_t *message)
     i = message->doc.termlist_begin ();
     i.skip_to (prefix);
 
-    in_reply_to = *i;
+    if (i != message->doc.termlist_end ())
+       in_reply_to = *i;
 
     /* It's perfectly valid for a message to have no In-Reply-To
      * header. For these cases, we return an empty string. */
@@ -332,10 +333,10 @@ notmuch_message_get_thread_id (notmuch_message_t *message)
        return message->thread_id;
 
     i = message->doc.termlist_begin ();
-
     i.skip_to (prefix);
 
-    id = *i;
+    if (i != message->doc.termlist_end ())
+       id = *i;
 
     if (i == message->doc.termlist_end () || id[0] != *prefix)
        INTERNAL_ERROR ("Message with document ID of %d has no thread ID.\n",
@@ -466,7 +467,7 @@ notmuch_message_get_tags (notmuch_message_t *message)
 
     i.skip_to (prefix);
 
-    while (1) {
+    while (i != end) {
        tag = *i;
 
        if (tag.empty () || tag[0] != *prefix)
@@ -547,6 +548,19 @@ _notmuch_message_sync (notmuch_message_t *message)
     db->replace_document (message->doc_id, message->doc);
 }
 
+/* Ensure that 'message' is not holding any file object open. Future
+ * calls to various functions will still automatically open the
+ * message file as needed.
+ */
+void
+_notmuch_message_close (notmuch_message_t *message)
+{
+    if (message->message_file) {
+       notmuch_message_file_close (message->message_file);
+       message->message_file = NULL;
+    }
+}
+
 /* Add a name:value term to 'message', (the actual term will be
  * encoded by prefixing the value with a short prefix). See
  * NORMAL_PREFIX and BOOLEAN_PREFIX arrays for the mapping of term