changeset 5896:a4c80b0ee22b HEAD

Don't crash if extension record size is 0.
author Timo Sirainen <tss@iki.fi>
date Sun, 08 Jul 2007 19:45:59 +0300
parents cb5e25c3b300
children 3ec9ce7cd5e7
files src/lib-index/mail-index-map.c src/lib-index/mail-index-sync-ext.c
diffstat 2 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-map.c	Sun Jul 08 19:33:18 2007 +0300
+++ b/src/lib-index/mail-index-map.c	Sun Jul 08 19:45:59 2007 +0300
@@ -171,7 +171,8 @@
 		}
 
 		if ((ext_hdr->record_size == 0 && ext_hdr->hdr_size == 0) ||
-		    ext_hdr->record_align == 0 || *name == '\0') {
+		    (ext_hdr->record_align == 0 && ext_hdr->record_size != 0) ||
+		    *name == '\0') {
 			mail_index_set_error(index, "Corrupted index file %s: "
 					     "Broken header extension %s",
 					     index->filepath, *name == '\0' ?
@@ -190,8 +191,9 @@
 			return -1;
 		}
 
-		if ((ext_hdr->record_offset % ext_hdr->record_align) != 0 ||
-		    (map->hdr.record_size % ext_hdr->record_align) != 0) {
+		if (ext_hdr->record_size > 0 &&
+		    ((ext_hdr->record_offset % ext_hdr->record_align) != 0 ||
+		     (map->hdr.record_size % ext_hdr->record_align) != 0)) {
 			mail_index_set_error(index, "Corrupted index file %s: "
 				"Record field %s alignmentation %u not used",
 				index->filepath, name, ext_hdr->record_align);
--- a/src/lib-index/mail-index-sync-ext.c	Sun Jul 08 19:33:18 2007 +0300
+++ b/src/lib-index/mail-index-sync-ext.c	Sun Jul 08 19:45:59 2007 +0300
@@ -192,7 +192,8 @@
 			if (sorted[i]->record_align > max_align)
 				max_align = sorted[i]->record_align;
 
-			if (sorted[i]->record_offset == 0) {
+			if (sorted[i]->record_offset == 0 &&
+			    sorted[i]->record_size > 0) {
 				if ((offset % sorted[i]->record_align) == 0)
 					break;
 				if (sorted[i]->record_align < min_align)