]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Make sure sync_mailbox_idx isn't used uninitialized
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Jul 2017 11:40:31 +0000 (14:40 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Thu, 17 Aug 2017 08:50:27 +0000 (11:50 +0300)
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.

src/plugins/virtual/virtual-storage.h
src/plugins/virtual/virtual-sync.c

index 8c3bbbdb2a374d841b58e115c6b5a90cb6bb022e..8a6e3a50efcdfdadc1bde0ee5271f395c8ba49a9 100644 (file)
@@ -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;
index bce40998e514bcd1b8457ddc0845824757d25ba6..475a624554f67c0ef166ec782b95d7c4b7fa7149 100644 (file)
@@ -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),