[PATCH 05/10] lib: handle xapian exception in n_m_remove_all_tags

Subject: [PATCH 05/10] lib: handle xapian exception in n_m_remove_all_tags

Date: Wed, 8 Jul 2020 21:17:04 -0300

To: notmuch@notmuchmail.org

Cc: David Bremner

From: David Bremner


At least the exception we already catch should be reported properly.
---
 lib/message.cc         | 10 +++++++---
 lib/notmuch.h          |  6 ++++--
 test/T560-lib-error.sh |  1 -
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/message.cc b/lib/message.cc
index 8e090aa3..09708ed9 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -2071,16 +2071,20 @@ notmuch_message_remove_all_tags (notmuch_message_t *message)
     status = _notmuch_database_ensure_writable (message->notmuch);
     if (status)
 	return status;
+    tags = notmuch_message_get_tags (message);
+    if (! tags)
+	return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
 
-    for (tags = notmuch_message_get_tags (message);
+    for (;
 	 notmuch_tags_valid (tags);
 	 notmuch_tags_move_to_next (tags)) {
 	tag = notmuch_tags_get (tags);
 
 	private_status = _notmuch_message_remove_term (message, "tag", tag);
 	if (private_status) {
-	    INTERNAL_ERROR ("_notmuch_message_remove_term return unexpected value: %d\n",
-			    private_status);
+	    return COERCE_STATUS (private_status,
+				   "_notmuch_message_remove_term return unexpected value: %d\n",
+				   private_status);
 	}
     }
 
diff --git a/lib/notmuch.h b/lib/notmuch.h
index 4d433698..9a19e2f7 100644
--- a/lib/notmuch.h
+++ b/lib/notmuch.h
@@ -1635,8 +1635,10 @@ notmuch_message_remove_tag (notmuch_message_t *message, const char *tag);
  * See notmuch_message_freeze for an example showing how to safely
  * replace tag values.
  *
- * NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
- *	mode so message cannot be modified.
+ * @retval #NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in
+ *	read-only mode so message cannot be modified.
+ * @retval #NOTMUCH_STATUS_XAPIAN_EXCEPTION: an execption was thrown
+ *      accessing the database.
  */
 notmuch_status_t
 notmuch_message_remove_all_tags (notmuch_message_t *message);
diff --git a/test/T560-lib-error.sh b/test/T560-lib-error.sh
index acde5786..5361be77 100755
--- a/test/T560-lib-error.sh
+++ b/test/T560-lib-error.sh
@@ -600,7 +600,6 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "Handle removing all tags with closed db"
-test_subtest_known_broken
 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
     {
         notmuch_status_t status;
-- 
2.27.0
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: