From: Timo Sirainen Date: Thu, 8 Jun 2017 08:35:58 +0000 (+0300) Subject: imapc: Fix potential crash if initial sync fails. X-Git-Tag: 2.2.31.rc1~123 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0229904b5dab1d0377342bcba88ae9a4fe3906e8;p=thirdparty%2Fdovecot%2Fcore.git imapc: Fix potential crash if initial sync fails. Happened at least if mailbox had 0 mails and a failing mailbox_sync() was called twice. Fixes: Panic: file imapc-sync.c: line 477 (imapc_sync_index): assertion failed: (mbox->sync_fetch_first_uid == 1) --- diff --git a/src/lib-storage/index/imapc/imapc-sync.c b/src/lib-storage/index/imapc/imapc-sync.c index 645e808624..957b80a498 100644 --- a/src/lib-storage/index/imapc/imapc-sync.c +++ b/src/lib-storage/index/imapc/imapc-sync.c @@ -483,7 +483,6 @@ static void imapc_sync_index(struct imapc_sync_context *ctx) adding new messages requires sync locking to avoid duplicates. */ imapc_sync_send_commands(ctx, mbox->sync_fetch_first_uid); - mbox->sync_fetch_first_uid = 0; } imapc_sync_expunge_finish(ctx); @@ -500,6 +499,10 @@ static void imapc_sync_index(struct imapc_sync_context *ctx) if (mbox->box.v.sync_notify != NULL) mbox->box.v.sync_notify(&mbox->box, 0, 0); + if (!ctx->failed) { + /* reset only after a successful sync */ + mbox->sync_fetch_first_uid = 0; + } if (!mbox->initial_sync_done && !ctx->failed) { imapc_initial_sync_check(ctx, FALSE); mbox->initial_sync_done = TRUE;