Avoid access of a Xapian iterator's object when there's nothing there.

This eliminates a crash when a message (either corrupted or a non-mail
file that wasn't properly detected as not being mail) has no In-Reply-To
header, (and so few terms that trying to skip to the prefix of the
In-Reply-To terms actually brings us to the end of the termlist).
This commit is contained in:
Carl Worth 2009-11-20 12:06:11 +01:00
parent f6ca697e27
commit 31b54bc787

View file

@ -285,6 +285,7 @@ _notmuch_message_get_in_reply_to (notmuch_message_t *message)
i = message->doc.termlist_begin (); i = message->doc.termlist_begin ();
i.skip_to (prefix); i.skip_to (prefix);
if (i != message->doc.termlist_end ())
in_reply_to = *i; in_reply_to = *i;
/* It's perfectly valid for a message to have no In-Reply-To /* It's perfectly valid for a message to have no In-Reply-To
@ -332,9 +333,9 @@ notmuch_message_get_thread_id (notmuch_message_t *message)
return message->thread_id; return message->thread_id;
i = message->doc.termlist_begin (); i = message->doc.termlist_begin ();
i.skip_to (prefix); i.skip_to (prefix);
if (i != message->doc.termlist_end ())
id = *i; id = *i;
if (i == message->doc.termlist_end () || id[0] != *prefix) if (i == message->doc.termlist_end () || id[0] != *prefix)
@ -466,7 +467,7 @@ notmuch_message_get_tags (notmuch_message_t *message)
i.skip_to (prefix); i.skip_to (prefix);
while (1) { while (i != end) {
tag = *i; tag = *i;
if (tag.empty () || tag[0] != *prefix) if (tag.empty () || tag[0] != *prefix)