From: Timo Sirainen Date: Mon, 24 Jul 2017 11:40:31 +0000 (+0300) Subject: virtual: Make sure sync_mailbox_idx isn't used uninitialized X-Git-Tag: 2.3.0.rc1~1160 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9599d7ecbc84e9d33295e1e9a9be937faddce68a;p=thirdparty%2Fdovecot%2Fcore.git virtual: Make sure sync_mailbox_idx isn't used uninitialized Changing its indexes to start from 1, we can add an assert to check that it's never the default 0 when we need to use it. --- diff --git a/src/plugins/virtual/virtual-storage.h b/src/plugins/virtual/virtual-storage.h index 8c3bbbdb2a..8a6e3a50ef 100644 --- a/src/plugins/virtual/virtual-storage.h +++ b/src/plugins/virtual/virtual-storage.h @@ -72,7 +72,7 @@ struct virtual_backend_box { uint32_t mailbox_id; const char *name; - unsigned int sync_mailbox_idx; + unsigned int sync_mailbox_idx1; uint32_t sync_uid_validity; uint32_t sync_next_uid; uint64_t sync_highest_modseq; diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index bce40998e5..475a624554 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -247,7 +247,7 @@ int virtual_mailbox_ext_header_read(struct virtual_mailbox *mbox, bbox->sync_highest_modseq = mailboxes[i].highest_modseq; bbox->sync_next_uid = mailboxes[i].next_uid; - bbox->sync_mailbox_idx = i; + bbox->sync_mailbox_idx1 = i+1; } ext_name_offset += mailboxes[i].name_len; prev_mailbox_id = mailboxes[i].id; @@ -306,7 +306,7 @@ static void virtual_sync_ext_header_rewrite(struct virtual_sync_context *ctx) i_assert(i == 0 || bboxes[i]->mailbox_id > bboxes[i-1]->mailbox_id); - bboxes[i]->sync_mailbox_idx = i; + bboxes[i]->sync_mailbox_idx1 = i+1; mailbox.id = bboxes[i]->mailbox_id; mailbox.name_len = strlen(bboxes[i]->name); mailbox.uid_validity = bboxes[i]->sync_uid_validity; @@ -1149,8 +1149,9 @@ static void virtual_sync_backend_ext_header(struct virtual_sync_context *ctx, mailbox.highest_modseq = bbox->ondisk_highest_modseq; mailbox.next_uid = bbox->sync_next_uid; + i_assert(bbox->sync_mailbox_idx1 > 0); mailbox_offset = sizeof(struct virtual_mail_index_header) + - bbox->sync_mailbox_idx * sizeof(mailbox); + (bbox->sync_mailbox_idx1-1) * sizeof(mailbox); mail_index_update_header_ext(ctx->trans, ctx->mbox->virtual_ext_id, mailbox_offset + uidval_pos, CONST_PTR_OFFSET(&mailbox, uidval_pos),