dovecot-1.1: Check extension header validity before using it.

dovecot at dovecot.org dovecot at dovecot.org
Fri Mar 7 03:52:56 EET 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/f4990a37a8df
changeset: 7366:f4990a37a8df
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Mar 07 03:49:36 2008 +0200
description:
Check extension header validity before using it.

diffstat:

1 file changed, 15 insertions(+), 14 deletions(-)
src/lib-index/mail-index-sync-ext.c |   29 +++++++++++++++--------------

diffs (46 lines):

diff -r 33b90e21b634 -r f4990a37a8df src/lib-index/mail-index-sync-ext.c
--- a/src/lib-index/mail-index-sync-ext.c	Fri Mar 07 03:02:44 2008 +0200
+++ b/src/lib-index/mail-index-sync-ext.c	Fri Mar 07 03:49:36 2008 +0200
@@ -402,6 +402,21 @@ int mail_index_sync_ext_intro(struct mai
 		return -1;
 	}
 
+	memset(&ext_hdr, 0, sizeof(ext_hdr));
+	ext_hdr.name_size = strlen(name);
+	ext_hdr.reset_id = u->reset_id;
+	ext_hdr.hdr_size = u->hdr_size;
+	ext_hdr.record_size = u->record_size;
+	ext_hdr.record_align = u->record_align;
+
+	/* make sure the header looks valid before doing anything with it */
+	if (mail_index_map_ext_hdr_check(&map->hdr, &ext_hdr,
+					 name, &error) < 0) {
+		mail_index_sync_set_corrupted(ctx,
+			"Broken extension introduction: %s", error);
+		return -1;
+	}
+
 	if (ext_map_idx != (uint32_t)-1) {
 		/* exists already */
 		if (u->reset_id == ext->reset_id) {
@@ -433,20 +448,6 @@ int mail_index_sync_ext_intro(struct mai
 				   hdr_buf->used);
 	}
 
-	memset(&ext_hdr, 0, sizeof(ext_hdr));
-	ext_hdr.name_size = strlen(name);
-	ext_hdr.reset_id = u->reset_id;
-	ext_hdr.hdr_size = u->hdr_size;
-	ext_hdr.record_size = u->record_size;
-	ext_hdr.record_align = u->record_align;
-
-	if (mail_index_map_ext_hdr_check(&map->hdr, &ext_hdr,
-					 name, &error) < 0) {
-		mail_index_sync_set_corrupted(ctx,
-			"Broken extension introduction: %s", error);
-		return -1;
-	}
-
 	/* register record offset initially using zero,
 	   sync_ext_reorder() will fix it. */
 	ext_map_idx = mail_index_map_register_ext(map, name, hdr_buf->used,


More information about the dovecot-cvs mailing list