]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fix memory leak when selecting mailboxes with '-' or /metadata
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 12 Jun 2018 15:01:21 +0000 (18:01 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 22 Aug 2018 09:44:39 +0000 (12:44 +0300)
src/plugins/virtual/virtual-config.c

index 0fbde87232f707f94c2a1ef306e7c396aff68c9b..fd81372572a582911aa11fb88df0b69a1d7b269a 100644 (file)
@@ -392,7 +392,7 @@ static int virtual_config_expand_wildcards(struct virtual_parse_context *ctx,
        struct mail_user *user = ctx->mbox->storage->storage.user;
        ARRAY_TYPE(virtual_backend_box) wildcard_boxes, neg_boxes, metadata_boxes;
        struct mailbox_list_iterate_context *iter;
-       struct virtual_backend_box *const *wboxes;
+       struct virtual_backend_box *const *wboxes, *const *boxp;
        const char **patterns;
        const struct mailbox_info *info;
        unsigned int i, j, count;
@@ -440,6 +440,10 @@ static int virtual_config_expand_wildcards(struct virtual_parse_context *ctx,
        }
        for (i = 0; i < count; i++)
                mail_search_args_unref(&wboxes[i]->search_args);
+       array_foreach(&neg_boxes, boxp)
+               mail_search_args_unref(&(*boxp)->search_args);
+       array_foreach(&metadata_boxes, boxp)
+               mail_search_args_unref(&(*boxp)->search_args);
        if (mailbox_list_iter_deinit(&iter) < 0) {
                *error_r = mailbox_list_get_last_internal_error(user->namespaces->list, NULL);
                return -1;