]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fix mailbox_get_uid_range() to handle "*" correctly
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 29 Apr 2021 12:43:10 +0000 (15:43 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 5 May 2021 14:22:04 +0000 (17:22 +0300)
Previously attempting to convert e.g. 1:* range would just assert-crash.
There were no such callers currently though.

src/lib-storage/mailbox-get.c
src/lib-storage/test-mailbox-get.c

index 8076e18560806a57760ecf9be865ca71264d5e7d..e1c1f20163a5529189df9e1c623cb4c3a7bfe45a 100644 (file)
@@ -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++) {
index 204ca898dfaf4eb9b6e437e3c03fd398507b3062..42d5a325d46048fde2af8554b1c2a9cb8d14a760 100644 (file)
@@ -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)
 {