From: Timo Sirainen Date: Thu, 29 Apr 2021 12:43:10 +0000 (+0300) Subject: lib-storage: Fix mailbox_get_uid_range() to handle "*" correctly X-Git-Tag: 2.3.16~222 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3421ea2f78d5864163d43ea3dada88887900b531;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Fix mailbox_get_uid_range() to handle "*" correctly Previously attempting to convert e.g. 1:* range would just assert-crash. There were no such callers currently though. --- diff --git a/src/lib-storage/mailbox-get.c b/src/lib-storage/mailbox-get.c index 8076e18560..e1c1f20163 100644 --- a/src/lib-storage/mailbox-get.c +++ b/src/lib-storage/mailbox-get.c @@ -17,14 +17,20 @@ void mailbox_get_uid_range(struct mailbox *box, { const struct seq_range *range; unsigned int i, count; - uint32_t seq, uid; + uint32_t seq, uid, uid2; range = array_get(seqs, &count); for (i = 0; i < count; i++) { if (range[i].seq2 == (uint32_t)-1) { - i_assert(count == i-1); - mail_index_lookup_uid(box->view, range[i].seq1, &uid); - seq_range_array_add_range(uids, uid, (uint32_t)-1); + i_assert(i == count-1); + mail_index_lookup_uid(box->view, + mail_index_view_get_messages_count(box->view), + &uid2); + if (range[i].seq1 == (uint32_t)-1) + uid = uid2; + else + mail_index_lookup_uid(box->view, range[i].seq1, &uid); + seq_range_array_add_range(uids, uid, uid2); break; } for (seq = range[i].seq1; seq <= range[i].seq2; seq++) { diff --git a/src/lib-storage/test-mailbox-get.c b/src/lib-storage/test-mailbox-get.c index 204ca898df..42d5a325d4 100644 --- a/src/lib-storage/test-mailbox-get.c +++ b/src/lib-storage/test-mailbox-get.c @@ -11,6 +11,11 @@ static guid_128_t mail_guids[N_ELEMENTS(expunge_uids)]; static unsigned int expunge_idx; static unsigned int nonexternal_idx; +uint32_t mail_index_view_get_messages_count(struct mail_index_view *view ATTR_UNUSED) +{ + return 0; +} + void mail_index_lookup_uid(struct mail_index_view *view ATTR_UNUSED, uint32_t seq, uint32_t *uid_r) {