From: Timo Sirainen Date: Wed, 29 Jun 2016 15:31:21 +0000 (+0300) Subject: maildir: Fixed updating filenames in existing uidlist X-Git-Tag: 2.3.0.rc1~3388 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=38920bff33eaa2acef5c200df5ce7088fd61e673;p=thirdparty%2Fdovecot%2Fcore.git maildir: Fixed updating filenames in existing uidlist Broken by 042668c0c. This could have caused errors like: - maildir_file_do(...): Filename keeps changing - Expunged message reappeared, giving a new UID --- diff --git a/src/lib-storage/index/maildir/maildir-uidlist.c b/src/lib-storage/index/maildir/maildir-uidlist.c index e29b925670..99db5c79af 100644 --- a/src/lib-storage/index/maildir/maildir-uidlist.c +++ b/src/lib-storage/index/maildir/maildir-uidlist.c @@ -1706,6 +1706,8 @@ maildir_uidlist_sync_next_partial(struct maildir_uidlist_sync_ctx *ctx, uidlist->change_counter++; hash_table_insert(uidlist->files, rec->filename, rec); + } else if (strcmp(rec->filename, filename) != 0) { + rec->filename = p_strdup(uidlist->record_pool, filename); } if (uid != 0) { if (rec->uid != uid && rec->uid != (uint32_t)-1) { @@ -1800,6 +1802,8 @@ int maildir_uidlist_sync_next_uid(struct maildir_uidlist_sync_ctx *ctx, to check for duplicates. */ rec->flags &= ~(MAILDIR_UIDLIST_REC_FLAG_NEW_DIR | MAILDIR_UIDLIST_REC_FLAG_MOVED); + if (strcmp(rec->filename, filename) != 0) + rec->filename = p_strdup(ctx->record_pool, filename); } else { old_rec = hash_table_lookup(uidlist->files, filename); i_assert(old_rec != NULL || UIDLIST_IS_LOCKED(uidlist));