From b84ba63bc158ecbe651ed5eae739fcfaf3872779 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 25 Mar 2009 15:52:52 -0400 Subject: [PATCH] mail_index_map_modseq_clone() caused memory corruption. --HG-- branch : HEAD --- src/lib-index/mail-index-modseq.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/lib-index/mail-index-modseq.c b/src/lib-index/mail-index-modseq.c index 841d379428..b0a0bcce4c 100644 --- a/src/lib-index/mail-index-modseq.c +++ b/src/lib-index/mail-index-modseq.c @@ -612,12 +612,24 @@ struct mail_index_map_modseq * mail_index_map_modseq_clone(const struct mail_index_map_modseq *mmap) { struct mail_index_map_modseq *new_mmap; + const struct metadata_modseqs *src_metadata; + struct metadata_modseqs *dest_metadata; + unsigned int i, count; + + src_metadata = array_get(&mmap->metadata_modseqs, &count); new_mmap = i_new(struct mail_index_map_modseq, 1); - i_array_init(&new_mmap->metadata_modseqs, - array_count(&mmap->metadata_modseqs) + 16); - array_append_array(&new_mmap->metadata_modseqs, - &mmap->metadata_modseqs); + i_array_init(&new_mmap->metadata_modseqs, count + 16); + + for (i = 0; i < count; i++) { + dest_metadata = array_append_space(&new_mmap->metadata_modseqs); + if (array_is_created(&src_metadata[i].modseqs)) { + i_array_init(&dest_metadata->modseqs, + array_count(&src_metadata[i].modseqs)); + array_append_array(&dest_metadata->modseqs, + &src_metadata[i].modseqs); + } + } return new_mmap; } -- 2.47.3