changeset 3147:6c7d463eaf1e HEAD

Don't allow duplicate extension names in index header.
author Timo Sirainen <tss@iki.fi>
date Wed, 09 Feb 2005 00:44:47 +0200
parents 9a8bf1c86699
children d9327a3dbf97
files src/lib-index/mail-index.c
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index.c	Tue Feb 08 14:28:12 2005 +0200
+++ b/src/lib-index/mail-index.c	Wed Feb 09 00:44:47 2005 +0200
@@ -185,6 +185,7 @@
 	} else {
 		idx = map->extensions->used / sizeof(*ext);
 	}
+	i_assert(mail_index_map_lookup_ext(map, name) == (uint32_t)-1);
 
 	ext = buffer_append_space_unsafe(map->extensions, sizeof(*ext));
 	memset(ext, 0, sizeof(*ext));
@@ -259,6 +260,7 @@
 				index->filepath);
 			return -1;
 		}
+
 		offset += sizeof(*ext_hdr);
 		name_offset = offset;
 		offset += ext_hdr->name_size + get_align(ext_hdr->name_size);
@@ -266,6 +268,15 @@
 		t_push();
 		name = t_strndup(CONST_PTR_OFFSET(map->hdr_base, name_offset),
 				 ext_hdr->name_size);
+
+		if (mail_index_map_lookup_ext(map, name) != (uint32_t)-1) {
+			mail_index_set_error(index, "Corrupted index file %s: "
+				"Duplicate header extension %s",
+				index->filepath, name);
+			t_pop();
+			return -1;
+		}
+
 		mail_index_map_register_ext(index, map, name,
 					    offset, ext_hdr->hdr_size,
 					    ext_hdr->record_offset,