diff options
| author | David Bremner <david@tethera.net> | 2018-04-13 22:08:05 -0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2018-04-20 11:23:31 -0300 |
| commit | 9293d6da27494d7b607c945c6678bc890749b94f (patch) | |
| tree | 8909a7c1a43086075ce1c77b99fc13a26ce73920 /lib/thread.cc | |
| parent | ab55ca8e0a84b8e00e42860fa0025c1ae86b4478 (diff) | |
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.
Diffstat (limited to 'lib/thread.cc')
| -rw-r--r-- | lib/thread.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/thread.cc b/lib/thread.cc index 3561b27f..dbac002f 100644 --- a/lib/thread.cc +++ b/lib/thread.cc @@ -397,7 +397,13 @@ _resolve_thread_relationships (notmuch_thread_t *thread) for (node = thread->message_list->head; node; node = node->next) { message = node->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, in_reply_to, NULL, (void **) &parent)) |
