dovecot-1.1: Fixed extension record checking.

dovecot at dovecot.org dovecot at dovecot.org
Sat Mar 15 06:58:23 EET 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/fc526477d36b
changeset: 7419:fc526477d36b
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Mar 15 06:58:19 2008 +0200
description:
Fixed extension record checking.

diffstat:

1 file changed, 10 insertions(+), 2 deletions(-)
src/lib-index/mail-index-map.c |   12 ++++++++++--

diffs (24 lines):

diff -r a18f7f0dcff5 -r fc526477d36b src/lib-index/mail-index-map.c
--- 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,10 +178,18 @@ int mail_index_map_ext_hdr_check(const s
 	}
 
 	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) {


More information about the dovecot-cvs mailing list