Mercurial > dovecot > original-hg > dovecot-1.2
changeset 3123:c663b234cfcb HEAD
Don't crash when extension header is resized and there are extensions after
it.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 26 Jan 2005 20:58:49 +0200 |
parents | 314df8f53731 |
children | 122ddc6cc9f5 |
files | src/lib-index/mail-index-sync-ext.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync-ext.c Sun Jan 23 01:25:51 2005 +0200 +++ b/src/lib-index/mail-index-sync-ext.c Wed Jan 26 20:58:49 2005 +0200 @@ -318,6 +318,18 @@ ext_hdr->record_align = ext->record_align; } + if (new_size != old_size) { + /* move all hdr_offset of all extensions after this one */ + size_t i, count = map->extensions->used / sizeof(*ext); + + ext -= ext_id; + for (i = ext_id + 1; i < count; i++) { + i_assert(ext[i].hdr_offset > ext[i-1].hdr_offset); + ext[i].hdr_offset += + (ssize_t)new_size - (ssize_t)old_size; + } + } + if (old_record_size != u->record_size) { map = sync_ext_reorder(map, ext_id, old_record_size); mail_index_sync_replace_map(ctx, map);