changeset 5952:ba118a9eeb50 HEAD

Some paranoia fixes for memory allocation. Don't access a mmaped variable directly in case it happens to change.
author Timo Sirainen <tss@iki.fi>
date Thu, 12 Jul 2007 03:17:38 +0300
parents e9b5d3d33b95
children 2b150b4b49df
files src/lib-index/mail-cache-fields.c
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-fields.c	Thu Jul 12 02:44:47 2007 +0300
+++ b/src/lib-index/mail-cache-fields.c	Thu Jul 12 03:17:38 2007 +0300
@@ -207,6 +207,7 @@
 	const uint8_t *types, *decisions;
 	const char *p, *names, *end;
 	void *orig_key, *orig_value;
+	unsigned int new_fields_count;
 	uint32_t offset, i;
 
 	if (mail_cache_header_fields_get_offset(cache, &offset) < 0)
@@ -243,18 +244,18 @@
 			return -1;
 	}
 	field_hdr = CONST_PTR_OFFSET(cache->data, offset);
+	new_fields_count = field_hdr->fields_count;
 
-	if (field_hdr->fields_count != 0) {
+	if (new_fields_count != 0) {
 		cache->file_field_map =
 			i_realloc(cache->file_field_map,
 				  cache->file_fields_count *
 				  sizeof(unsigned int),
-				  field_hdr->fields_count *
-				  sizeof(unsigned int));
+				  new_fields_count * sizeof(unsigned int));
 	} else {
 		i_free_and_null(cache->file_field_map);
 	}
-	cache->file_fields_count = field_hdr->fields_count;
+	cache->file_fields_count = new_fields_count;
 
 	last_used = CONST_PTR_OFFSET(field_hdr, MAIL_CACHE_FIELD_LAST_USED());
 	sizes = CONST_PTR_OFFSET(field_hdr,