From 57dd2621d4230bc2e06c69a4b9f8cf8f0ff2bc93 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 17 Nov 2016 17:13:09 +0200 Subject: [PATCH] lib-index: Make sure an already-corrupted index/log isn't written --- src/lib-index/mail-index-write.c | 2 ++ src/lib-index/mail-transaction-log-file.c | 9 +++++++++ 2 files changed, 11 insertions(+) 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 9c252c6185..c662fb17ff 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; -- 2.47.3