From: Timo Sirainen Date: Tue, 23 Aug 2016 11:08:11 +0000 (+0300) Subject: imap: Fixed expunge handling when un-hiberanting X-Git-Tag: 2.2.26~318 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1fd44e0634ac312d0960f39f9518b71e08248b65;p=thirdparty%2Fdovecot%2Fcore.git imap: Fixed expunge handling when un-hiberanting Fixes these errors: Failed to import client state: Message count mismatch after handling expunges Message UIDs CRC32 mismatch --- diff --git a/src/imap/imap-state.c b/src/imap/imap-state.c index 1d2fda8a0c..3130c78fa8 100644 --- a/src/imap/imap-state.c +++ b/src/imap/imap-state.c @@ -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,