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