diff options
| author | David Bremner <david@tethera.net> | 2022-12-27 13:08:47 -0400 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2023-02-20 09:22:32 -0400 |
| commit | 09f2ad8e853375930c63bca847f623bc722b9cc0 (patch) | |
| tree | c83851be016bd5ea542ac8b36f507b8068d5e83e /lib/message.cc | |
| parent | 4e6c6c8aac7f581448df525abd09b85c08358dd3 (diff) | |
lib: add better diagnostics for over long filenames.
Previously we just crashed with an internal error. With this change,
the caller can handle it better. Update notmuch-new so that it doesn't
crash with "unknown error code" because of this change.
Diffstat (limited to 'lib/message.cc')
| -rw-r--r-- | lib/message.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/message.cc b/lib/message.cc index 5ccca95a..1b1a071a 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -941,6 +941,7 @@ _notmuch_message_add_filename (notmuch_message_t *message, { const char *relative, *directory; notmuch_status_t status; + notmuch_private_status_t private_status; void *local = talloc_new (message); char *direntry; @@ -964,10 +965,17 @@ _notmuch_message_add_filename (notmuch_message_t *message, /* New file-direntry allows navigating to this message with * notmuch_directory_get_child_files() . */ - status = COERCE_STATUS (_notmuch_message_add_term (message, "file-direntry", direntry), - "adding file-direntry term"); - if (status) - return status; + private_status = _notmuch_message_add_term (message, "file-direntry", direntry); + switch (private_status) { + case NOTMUCH_PRIVATE_STATUS_SUCCESS: + break; + case NOTMUCH_PRIVATE_STATUS_TERM_TOO_LONG: + _notmuch_database_log (message->notmuch, "filename too long for file-direntry term: %s\n", + filename); + return NOTMUCH_STATUS_PATH_ERROR; + default: + return COERCE_STATUS (private_status, "adding file-direntry term"); + } status = _notmuch_message_add_folder_terms (message, directory); if (status) |
