changeset 7419:fc526477d36b HEAD

Fixed extension record checking.
author Timo Sirainen <tss@iki.fi>
date Sat, 15 Mar 2008 06:58:19 +0200
parents a18f7f0dcff5
children a4a552321bd3
files src/lib-index/mail-index-map.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-map.c	Sat Mar 15 05:17:21 2008 +0200
+++ b/src/lib-index/mail-index-map.c	Sat Mar 15 06:58:19 2008 +0200
@@ -178,12 +178,20 @@
 	}
 
 	if (ext_hdr->record_size > 0 &&
-	    ((ext_hdr->record_offset % ext_hdr->record_align) != 0 ||
-	     (hdr->record_size % ext_hdr->record_align) != 0)) {
+	    (ext_hdr->record_offset % ext_hdr->record_align) != 0) {
 		*error_r = t_strdup_printf("Record field alignment %u "
 					   "not used", ext_hdr->record_align);
 		return -1;
 	}
+	/* if we get here from extension introduction, record_offset=0 and
+	   hdr->record_size hasn't been updated yet */
+	if (ext_hdr->record_offset != 0 &&
+	    (hdr->record_size % ext_hdr->record_align) != 0) {
+		*error_r = t_strdup_printf("Record size not aligned by %u "
+					   "as required by extension",
+					   ext_hdr->record_align);
+		return -1;
+	}
 	if (ext_hdr->hdr_size > MAIL_INDEX_EXT_HEADER_MAX_SIZE) {
 		*error_r = t_strdup_printf("Headersize too large (%u)",
 					   ext_hdr->hdr_size);