diff --git a/lib/message.cc b/lib/message.cc index 0551a427..1a9eaffe 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1122,7 +1122,12 @@ _notmuch_message_ensure_filename_list (notmuch_message_t *message) const char * notmuch_message_get_filename (notmuch_message_t *message) { - _notmuch_message_ensure_filename_list (message); + try { + _notmuch_message_ensure_filename_list (message); + } catch (Xapian::Error &error) { + LOG_XAPIAN_EXCEPTION (message, error); + return NULL; + } if (message->filename_list == NULL) return NULL; diff --git a/lib/notmuch.h b/lib/notmuch.h index 037913f4..5c17ec7c 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -1433,6 +1433,8 @@ notmuch_message_count_files (notmuch_message_t *message); * this function will arbitrarily return a single one of those * filenames. See notmuch_message_get_filenames for returning the * complete list of filenames. + * + * This function returns NULL if it triggers a Xapian exception. */ const char * notmuch_message_get_filename (notmuch_message_t *message); diff --git a/test/T560-lib-error.sh b/test/T560-lib-error.sh index 7555197f..57c74a2b 100755 --- a/test/T560-lib-error.sh +++ b/test/T560-lib-error.sh @@ -406,7 +406,6 @@ EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "Handle getting message filename from closed database" -test_subtest_known_broken cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} { const char *filename;