Mercurial > dovecot > core-2.2
changeset 21142:572ab8899bbc
lib-index: Make sure an already-corrupted index/log isn't written
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 17 Nov 2016 17:13:09 +0200 |
parents | 10e1f8d0d80f |
children | aeb2d1f53ae5 |
files | src/lib-index/mail-index-write.c src/lib-index/mail-transaction-log-file.c |
diffstat | 2 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-write.c Thu Nov 17 02:48:20 2016 +0200 +++ b/src/lib-index/mail-index-write.c Thu Nov 17 17:13:09 2016 +0200 @@ -67,6 +67,8 @@ 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)
--- a/src/lib-index/mail-transaction-log-file.c Thu Nov 17 02:48:20 2016 +0200 +++ b/src/lib-index/mail-transaction-log-file.c Thu Nov 17 17:13:09 2016 +0200 @@ -220,6 +220,8 @@ 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 @@ 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;