]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Fixed expunge handling when un-hiberanting
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 23 Aug 2016 11:08:11 +0000 (14:08 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 23 Aug 2016 12:30:52 +0000 (15:30 +0300)
Fixes these errors:

Failed to import client state: Message count mismatch after handling expunges
Message UIDs CRC32 mismatch

src/imap/imap-state.c

index 1d2fda8a0c8f070bce4ce8fddab688a31751c0e9..3130c78fa824ea9f204360ac285eaa48b223eacc 100644 (file)
@@ -385,7 +385,7 @@ import_send_expunges(struct client *client,
        t_array_init(&expunged_seqs, array_count(&expunged_uids)+1); seq = 0;
        while (mailbox_search_next(search_ctx, &mail)) {
                while (seq_range_array_iter_nth(&iter, n, &expunged_uid) &&
-                      expunged_uid < mail->uid) {
+                      expunged_uid < mail->uid && seq < state->messages) {
                        seq++; n++;
                        array_append(&expunged_seqs, &seq, 1);
                        crc = crc32_data_more(crc, &expunged_uid,
@@ -397,7 +397,8 @@ import_send_expunges(struct client *client,
                if (++seq == state->messages)
                        break;
        }
-       while (seq_range_array_iter_nth(&iter, n, &expunged_uid)) {
+       while (seq_range_array_iter_nth(&iter, n, &expunged_uid) &&
+              seq < state->messages) {
                seq++; n++;
                array_append(&expunged_seqs, &seq, 1);
                crc = crc32_data_more(crc, &expunged_uid,