Mercurial > dovecot > original-hg > dovecot-1.2
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);