From: Timo Sirainen Date: Thu, 17 Nov 2016 15:13:09 +0000 (+0200) Subject: lib-index: Make sure an already-corrupted index/log isn't written X-Git-Tag: 2.2.27~126 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8d52f69ce8210149f9a78bae8d490904681db79;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Make sure an already-corrupted index/log isn't written --- diff --git a/src/lib-index/mail-index-write.c b/src/lib-index/mail-index-write.c index 0c59cec40d..57f4e85e73 100644 --- a/src/lib-index/mail-index-write.c +++ b/src/lib-index/mail-index-write.c @@ -67,6 +67,8 @@ static int mail_index_recreate(struct mail_index *index) i_assert(!MAIL_INDEX_IS_IN_MEMORY(index)); i_assert(map->hdr.indexid == index->indexid); + i_assert((map->hdr.flags & MAIL_INDEX_HDR_FLAG_CORRUPTED) == 0); + i_assert(index->indexid != 0); fd = mail_index_create_tmp_file(index, index->filepath, &path); if (fd == -1) diff --git a/src/lib-index/mail-transaction-log-file.c b/src/lib-index/mail-transaction-log-file.c index 302d6c3b2f..36d519b0bb 100644 --- a/src/lib-index/mail-transaction-log-file.c +++ b/src/lib-index/mail-transaction-log-file.c @@ -220,6 +220,8 @@ mail_transaction_log_init_hdr(struct mail_transaction_log *log, struct mail_index *index = log->index; struct mail_transaction_log_file *file; + i_assert(index->indexid != 0); + memset(hdr, 0, sizeof(*hdr)); hdr->major_version = MAIL_TRANSACTION_LOG_MAJOR_VERSION; hdr->minor_version = MAIL_TRANSACTION_LOG_MINOR_VERSION; @@ -846,6 +848,13 @@ int mail_transaction_log_file_create(struct mail_transaction_log_file *file, return -1; } + if (index->indexid == 0) { + mail_index_set_error(index, + "Can't create log file %s: Index is marked corrupted", + file->filepath); + return -1; + } + mail_transaction_log_get_dotlock_set(file->log, &new_dotlock_set); new_dotlock_set.lock_suffix = LOG_NEW_DOTLOCK_SUFFIX;