]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fix potential crash if initial sync fails.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 8 Jun 2017 08:35:58 +0000 (11:35 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 9 Jun 2017 07:40:30 +0000 (10:40 +0300)
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)

src/lib-storage/index/imapc/imapc-sync.c

index 645e80862492aed90312cc5ac3197e5bab346ba4..957b80a498361e9dda04792dabc3a4f6a9813a05 100644 (file)
@@ -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;