Mercurial > dovecot > original-hg > dovecot-1.2
changeset 2921:a5eda271256f HEAD
Wrong extension sync_handler might have been called if index extensions
didn't match current map's extensions.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 29 Nov 2004 20:01:26 +0200 |
parents | 9b772db4503d |
children | fadf33c24902 |
files | src/lib-index/mail-index-private.h src/lib-index/mail-index-sync-update.c src/lib-index/mail-index.c |
diffstat | 3 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-private.h Mon Nov 29 19:38:38 2004 +0200 +++ b/src/lib-index/mail-index-private.h Mon Nov 29 20:01:26 2004 +0200 @@ -40,6 +40,7 @@ struct mail_index_ext { const char *name; + uint32_t index_idx; /* index ext_id */ uint32_t reset_id; uint32_t hdr_offset; uint32_t hdr_size;
--- a/src/lib-index/mail-index-sync-update.c Mon Nov 29 19:38:38 2004 +0200 +++ b/src/lib-index/mail-index-sync-update.c Mon Nov 29 20:01:26 2004 +0200 @@ -785,9 +785,8 @@ rec = MAIL_INDEX_MAP_IDX(view->map, seq-1); old_data = PTR_OFFSET(rec, ext->record_offset); - /* @UNSAFE */ sync_handlers = view->index->sync_handlers->data; - sync_handlers += ctx->cur_ext_id; + sync_handlers += ext->index_idx; /* call sync handlers only when we're syncing index (not view) */ if ((sync_handlers->type & ctx->type) != 0) { @@ -797,6 +796,7 @@ return ret; } + /* @UNSAFE */ memcpy(old_data, u + 1, ext->record_size); return 1; }
--- a/src/lib-index/mail-index.c Mon Nov 29 19:38:38 2004 +0200 +++ b/src/lib-index/mail-index.c Mon Nov 29 20:01:26 2004 +0200 @@ -81,6 +81,7 @@ memset(&ext, 0, sizeof(ext)); ext.name = p_strdup(index->extension_pool, name); + ext.index_idx = ext_count; ext.hdr_size = default_hdr_size; ext.record_size = default_record_size; ext.record_align = default_record_align; @@ -181,6 +182,8 @@ ext_id = mail_index_ext_register(index, name, hdr_size, record_size, record_align); + ext->index_idx = ext_id; + while (map->ext_id_map->used < ext_id * sizeof(uint32_t)) buffer_append(map->ext_id_map, &empty_id, sizeof(empty_id)); buffer_write(map->ext_id_map, ext_id * sizeof(uint32_t),