mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
lib: break reference loop by choosing arbitrary top level msg
Other parts of notmuch (e.g. notmuch show) expect each thread to contain at least one top level message, and crash if this expectation is not met.
This commit is contained in:
parent
ab55ca8e0a
commit
9293d6da27
2 changed files with 7 additions and 2 deletions
|
@ -397,7 +397,13 @@ _resolve_thread_relationships (notmuch_thread_t *thread)
|
||||||
for (node = thread->message_list->head; node; node = node->next) {
|
for (node = thread->message_list->head; node; node = node->next) {
|
||||||
message = node->message;
|
message = node->message;
|
||||||
in_reply_to = _notmuch_message_get_in_reply_to (message);
|
in_reply_to = _notmuch_message_get_in_reply_to (message);
|
||||||
if (in_reply_to && strlen (in_reply_to) &&
|
/*
|
||||||
|
* if we reach the end of the list without finding a top-level
|
||||||
|
* message, that means the thread is a cycle (or set of
|
||||||
|
* cycles) and any message can be considered top-level
|
||||||
|
*/
|
||||||
|
if ((thread->toplevel_list->head || node->next) &&
|
||||||
|
in_reply_to && strlen (in_reply_to) &&
|
||||||
g_hash_table_lookup_extended (thread->message_hash,
|
g_hash_table_lookup_extended (thread->message_hash,
|
||||||
in_reply_to, NULL,
|
in_reply_to, NULL,
|
||||||
(void **) &parent))
|
(void **) &parent))
|
||||||
|
|
|
@ -356,7 +356,6 @@ test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
add_email_corpus broken
|
add_email_corpus broken
|
||||||
test_begin_subtest "reference loop does not crash"
|
test_begin_subtest "reference loop does not crash"
|
||||||
test_subtest_known_broken
|
|
||||||
test_expect_code 0 "notmuch show --format=json id:mid-loop-12@example.org id:mid-loop-21@example.org > OUTPUT"
|
test_expect_code 0 "notmuch show --format=json id:mid-loop-12@example.org id:mid-loop-21@example.org > OUTPUT"
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue