From: David Bremner Date: Thu, 20 Jul 2023 12:08:00 +0000 (-0300) Subject: lib/message: check message type before deleting document X-Git-Tag: 0.38_rc0~8 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=d93d49b6aed5b3f71651ffe79225da08c7d8f1aa lib/message: check message type before deleting document It isn't really clear how this worked before. Traversing the terms of a document after deleting it from the database seems likely to be undefined behaviour at best --- diff --git a/lib/message.cc b/lib/message.cc index 53f35dd1..46638f80 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1397,14 +1397,15 @@ _notmuch_message_delete (notmuch_message_t *message) Xapian::PostingIterator thread_doc, thread_doc_end; Xapian::PostingIterator mail_doc, mail_doc_end; - message->notmuch->writable_xapian_db->delete_document (message->doc_id); - /* look for a non-ghost message in the same thread */ /* if this was a ghost to begin with, we are done */ private_status = _notmuch_message_has_term (message, "type", "ghost", &is_ghost); if (private_status) return COERCE_STATUS (private_status, "Error trying to determine whether message was a ghost"); + + message->notmuch->writable_xapian_db->delete_document (message->doc_id); + if (is_ghost) return NOTMUCH_STATUS_SUCCESS;