mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
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.
This commit is contained in:
parent
4e6c6c8aac
commit
09f2ad8e85
4 changed files with 18 additions and 5 deletions
|
@ -941,6 +941,7 @@ _notmuch_message_add_filename (notmuch_message_t *message,
|
||||||
{
|
{
|
||||||
const char *relative, *directory;
|
const char *relative, *directory;
|
||||||
notmuch_status_t status;
|
notmuch_status_t status;
|
||||||
|
notmuch_private_status_t private_status;
|
||||||
void *local = talloc_new (message);
|
void *local = talloc_new (message);
|
||||||
char *direntry;
|
char *direntry;
|
||||||
|
|
||||||
|
@ -964,10 +965,17 @@ _notmuch_message_add_filename (notmuch_message_t *message,
|
||||||
|
|
||||||
/* New file-direntry allows navigating to this message with
|
/* New file-direntry allows navigating to this message with
|
||||||
* notmuch_directory_get_child_files() . */
|
* notmuch_directory_get_child_files() . */
|
||||||
status = COERCE_STATUS (_notmuch_message_add_term (message, "file-direntry", direntry),
|
private_status = _notmuch_message_add_term (message, "file-direntry", direntry);
|
||||||
"adding file-direntry term");
|
switch (private_status) {
|
||||||
if (status)
|
case NOTMUCH_PRIVATE_STATUS_SUCCESS:
|
||||||
return status;
|
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);
|
status = _notmuch_message_add_folder_terms (message, directory);
|
||||||
if (status)
|
if (status)
|
||||||
|
|
|
@ -293,6 +293,8 @@ typedef struct _notmuch_indexopts notmuch_indexopts_t;
|
||||||
*
|
*
|
||||||
* NOTMUCH_STATUS_OUT_OF_MEMORY: Out of memory.
|
* NOTMUCH_STATUS_OUT_OF_MEMORY: Out of memory.
|
||||||
*
|
*
|
||||||
|
* NOTMUCH_STATUS_PATH_ERROR: filename is too long
|
||||||
|
*
|
||||||
* NOTMUCH_STATUS_FILE_ERROR: An error occurred trying to create the
|
* NOTMUCH_STATUS_FILE_ERROR: An error occurred trying to create the
|
||||||
* database file (such as permission denied, or file not found,
|
* database file (such as permission denied, or file not found,
|
||||||
* etc.), or the database already exists.
|
* etc.), or the database already exists.
|
||||||
|
|
|
@ -413,6 +413,10 @@ add_file (notmuch_database_t *notmuch, const char *filename,
|
||||||
case NOTMUCH_STATUS_FILE_NOT_EMAIL:
|
case NOTMUCH_STATUS_FILE_NOT_EMAIL:
|
||||||
fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
|
fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
|
||||||
break;
|
break;
|
||||||
|
case NOTMUCH_STATUS_PATH_ERROR:
|
||||||
|
fprintf (stderr, "Note: Ignoring non-indexable path: %s\n", filename);
|
||||||
|
(void) print_status_database ("add_file", notmuch, status);
|
||||||
|
break;
|
||||||
case NOTMUCH_STATUS_FILE_ERROR:
|
case NOTMUCH_STATUS_FILE_ERROR:
|
||||||
/* Someone renamed/removed the file between scandir and now. */
|
/* Someone renamed/removed the file between scandir and now. */
|
||||||
state->vanished_files++;
|
state->vanished_files++;
|
||||||
|
|
|
@ -384,7 +384,6 @@ EOF
|
||||||
test_expect_equal_file EXPECTED OUTPUT
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
test_begin_subtest "Long file names have reasonable diagnostics"
|
test_begin_subtest "Long file names have reasonable diagnostics"
|
||||||
test_subtest_known_broken
|
|
||||||
printf -v name 'f%.0s' {1..234}
|
printf -v name 'f%.0s' {1..234}
|
||||||
generate_message "[filename]=$name"
|
generate_message "[filename]=$name"
|
||||||
notmuch new 2>&1 | notmuch_dir_sanitize >OUTPUT
|
notmuch new 2>&1 | notmuch_dir_sanitize >OUTPUT
|
||||||
|
|
Loading…
Reference in a new issue