# HG changeset patch # User Timo Sirainen # Date 1032154484 -10800 # Node ID f0a52521d844a0027a17ad57b92d2f221d69cab6 # Parent fbe3a420e9606366856df4dad0169e947a838bc3 data file wasn't initialized properly diff -r fbe3a420e960 -r f0a52521d844 src/lib-index/mail-index-data.c --- a/src/lib-index/mail-index-data.c Mon Sep 16 08:28:17 2002 +0300 +++ b/src/lib-index/mail-index-data.c Mon Sep 16 08:34:44 2002 +0300 @@ -126,7 +126,8 @@ i_assert(!data->anon_mmap); if (data->mmap_base != NULL) { - if (msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) + if (data->mmap_used_length > 0 && + msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) return index_data_set_syscall_error(data, "msync()"); if (munmap(data->mmap_base, data->mmap_full_length) < 0) @@ -147,6 +148,12 @@ hdr = data->mmap_base; + if (hdr->used_file_size < sizeof(MailIndexDataHeader)) { + index_data_set_corrupted(data, "used_file_size too small (" + "%"PRIuUOFF_T")", hdr->used_file_size); + return FALSE; + } + if (hdr->used_file_size > data->mmap_full_length) { index_data_set_corrupted(data, "used_file_size larger than " "real file size (%"PRIuUOFF_T @@ -206,7 +213,7 @@ { const char *realpath; - if (write_full(fd, &hdr, sizeof(hdr)) < 0) { + if (write_full(fd, hdr, sizeof(MailIndexDataHeader)) < 0) { index_file_set_syscall_error(index, temppath, "write_full()"); return NULL; } @@ -236,9 +243,9 @@ const char *temppath, *realpath; int fd; - memset(&hdr, 0, sizeof(hdr)); + memset(&hdr, 0, sizeof(MailIndexDataHeader)); hdr.indexid = index->indexid; - hdr.used_file_size = sizeof(hdr); + hdr.used_file_size = sizeof(MailIndexDataHeader); realpath = NULL; @@ -272,7 +279,7 @@ data->mmap_full_length = INDEX_DATA_INITIAL_SIZE; data->mmap_base = mmap_anon(data->mmap_full_length); - memcpy(data->mmap_base, &hdr, sizeof(hdr)); + memcpy(data->mmap_base, &hdr, sizeof(MailIndexDataHeader)); data->header = data->mmap_base; data->mmap_used_length = data->header->used_file_size; @@ -318,12 +325,12 @@ { MailIndexDataHeader hdr; - memset(&hdr, 0, sizeof(hdr)); + memset(&hdr, 0, sizeof(MailIndexDataHeader)); hdr.indexid = data->index->indexid; - hdr.used_file_size = sizeof(hdr); + hdr.used_file_size = sizeof(MailIndexDataHeader); if (data->anon_mmap) { - memcpy(data->mmap_base, &hdr, sizeof(hdr)); + memcpy(data->mmap_base, &hdr, sizeof(MailIndexDataHeader)); return TRUE; } @@ -336,7 +343,7 @@ if (lseek(data->fd, 0, SEEK_SET) < 0) return index_data_set_syscall_error(data, "lseek()"); - if (write_full(data->fd, &hdr, sizeof(hdr)) < 0) { + if (write_full(data->fd, &hdr, sizeof(MailIndexDataHeader)) < 0) { if (errno == ENOSPC) data->index->nodiskspace = TRUE; return index_data_set_syscall_error(data, "write_full()");