Mercurial > dovecot > original-hg > dovecot-1.2
changeset 228:a97509eb0bc3 HEAD
always verify the seen/deleted message counts in index header
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 15 Sep 2002 10:12:31 +0300 |
parents | 2499dad2932b |
children | 9ef72cb26b30 |
files | src/lib-index/mail-index.c |
diffstat | 1 files changed, 23 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index.c Sun Sep 15 10:00:39 2002 +0300 +++ b/src/lib-index/mail-index.c Sun Sep 15 10:12:31 2002 +0300 @@ -18,6 +18,7 @@ static int mmap_verify(MailIndex *index) { + MailIndexHeader *hdr; unsigned int extra; index->mmap_used_length = 0; @@ -42,26 +43,41 @@ index->last_lookup_seq = 0; index->last_lookup = NULL; - index->header = (MailIndexHeader *) index->mmap_base; - index->sync_id = index->header->sync_id; + hdr = index->mmap_base; + index->header = hdr; + index->sync_id = hdr->sync_id; - if (index->header->used_file_size > index->mmap_full_length) { + if (hdr->used_file_size > index->mmap_full_length) { index_set_corrupted(index, "used_file_size larger than real " "file size (%"PRIuUOFF_T" vs %"PRIuSIZE_T - ")", index->header->used_file_size, + ")", hdr->used_file_size, index->mmap_full_length); return FALSE; } - if ((index->header->used_file_size - sizeof(MailIndexHeader)) % + if ((hdr->used_file_size - sizeof(MailIndexHeader)) % sizeof(MailIndexRecord) != 0) { index_set_corrupted(index, "Invalid used_file_size in header " "(%"PRIuUOFF_T")", - index->header->used_file_size); + hdr->used_file_size); return FALSE; } - index->mmap_used_length = index->header->used_file_size; + if (hdr->messages_count < hdr->seen_messages_count) { + index_set_corrupted(index, "Invalid seen messages count " + "(%u < %u)", hdr->messages_count, + hdr->seen_messages_count); + return FALSE; + } + + if (hdr->messages_count < hdr->deleted_messages_count) { + index_set_corrupted(index, "Invalid deleted messages count " + "(%u < %u)", hdr->messages_count, + hdr->deleted_messages_count); + return FALSE; + } + + index->mmap_used_length = hdr->used_file_size; return TRUE; }