aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2023-07-20 09:08:00 -0300
committerDavid Bremner <david@tethera.net>2023-07-22 07:11:46 -0300
commitd93d49b6aed5b3f71651ffe79225da08c7d8f1aa (patch)
tree1d711e31cba3997333fad9913543bd8c87752f35
parent08ca74d71531f7907d3db820c55d59259bb1cb5b (diff)
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
-rw-r--r--lib/message.cc5
1 files changed, 3 insertions, 2 deletions
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;