From: Timo Sirainen Date: Tue, 19 May 2020 15:31:31 +0000 (+0300) Subject: imap: imap_search_seqset_iter_next() - Assert-crash if iteration doesn't progress X-Git-Tag: 2.3.11.2~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c06386a928ddac40bcdc9a2f9fe5cebcf98ade6;p=thirdparty%2Fdovecot%2Fcore.git imap: imap_search_seqset_iter_next() - Assert-crash if iteration doesn't progress This can be done easily with seq_range_array_remove_seq_range(). This is cleaner to use than invert+intersect. I originally didn't notice that this function existed. --- diff --git a/src/imap/imap-search-args.c b/src/imap/imap-search-args.c index 1ff8b2d32a..7f6552c32a 100644 --- a/src/imap/imap-search-args.c +++ b/src/imap/imap-search-args.c @@ -310,14 +310,14 @@ void imap_search_seqset_iter_deinit(struct imap_search_seqset_iter **_iter) bool imap_search_seqset_iter_next(struct imap_search_seqset_iter *iter) { - if (!array_is_created(&iter->seqset_left)) + if (!array_is_created(&iter->seqset_left) || + array_count(&iter->seqset_left) == 0) return FALSE; /* remove the last batch of searched mails from seqset_left */ - seq_range_array_invert(&iter->search_args->args->value.seqset, - 1, UINT32_MAX); - seq_range_array_intersect(&iter->seqset_left, - &iter->search_args->args->value.seqset); + if (seq_range_array_remove_seq_range(&iter->seqset_left, + &iter->search_args->args->value.seqset) == 0) + i_unreached(); imap_search_seqset_next_batch(iter); return array_count(&iter->search_args->args->value.seqset) > 0; }