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);