From: Timo Sirainen Date: Mon, 11 Jul 2016 08:55:34 +0000 (+0300) Subject: mdbox: Fixed crash when saving POP3 UIDLs to a non-empty mailbox. X-Git-Tag: 2.2.26~487 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=baf1d37849d3a7746b51530a666385ccec6826be;p=thirdparty%2Fdovecot%2Fcore.git mdbox: Fixed crash when saving POP3 UIDLs to a non-empty mailbox. Fixes assert: Panic: file mdbox-save.c: line 337: unreached --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-save.c b/src/lib-storage/index/dbox-multi/mdbox-save.c index d9bdc022b6..e8f8f32641 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-save.c +++ b/src/lib-storage/index/dbox-multi/mdbox-save.c @@ -328,12 +328,18 @@ int mdbox_transaction_save_commit_pre(struct mail_save_context *_ctx) &_t->changes->saved_uids); if (ctx->ctx.highest_pop3_uidl_seq != 0) { + const struct dbox_save_mail *mails; struct seq_range_iter iter; + unsigned int highest_pop3_uidl_idx; uint32_t uid; + mails = array_idx(&ctx->mails, 0); + highest_pop3_uidl_idx = + ctx->ctx.highest_pop3_uidl_seq - mails[0].seq; + i_assert(mails[highest_pop3_uidl_idx].seq == ctx->ctx.highest_pop3_uidl_seq); + seq_range_array_iter_init(&iter, &_t->changes->saved_uids); - if (!seq_range_array_iter_nth(&iter, - ctx->ctx.highest_pop3_uidl_seq-1, &uid)) + if (!seq_range_array_iter_nth(&iter, highest_pop3_uidl_idx, &uid)) i_unreached(); index_pop3_uidl_set_max_uid(&ctx->mbox->box, ctx->ctx.trans, uid); }