]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
acl-plugin: Deinit acl_iter on deinit too
authorAki Tuomi <aki.tuomi@dovecot.fi>
Sat, 3 Sep 2016 12:23:11 +0000 (15:23 +0300)
committerGitLab <gitlab@git.dovecot.net>
Wed, 7 Sep 2016 09:09:15 +0000 (12:09 +0300)
src/plugins/acl/acl-attributes.c

index 06ed200e8e67b854c22ca3a8a262ac60c5c43499..592a6de5a08ff4e832e534ac6fae76f0501b98fc 100644 (file)
@@ -195,6 +195,9 @@ acl_attribute_iter_next_acl(struct acl_mailbox_attribute_iter *aiter)
 {
        struct acl_rights rights;
 
+       if (aiter->failed)
+               return NULL;
+
        while (acl_object_list_next(aiter->acl_iter, &rights)) {
                if (rights.global)
                        continue;
@@ -205,7 +208,6 @@ acl_attribute_iter_next_acl(struct acl_mailbox_attribute_iter *aiter)
        if (acl_object_list_deinit(&aiter->acl_iter) < 0) {
                mail_storage_set_internal_error(aiter->iter.box->storage);
                aiter->failed = TRUE;
-               return NULL;
        }
        return NULL;
 }
@@ -237,8 +239,10 @@ int acl_attribute_iter_deinit(struct mailbox_attribute_iter *iter)
                if (abox->module_ctx.super.attribute_iter_deinit(aiter->super) < 0)
                        ret = -1;
        }
-       if (aiter->acl_iter != NULL)
-               acl_object_list_deinit(&aiter->acl_iter);
+       if (aiter->acl_iter != && acl_object_list_deinit(&aiter->acl_iter) < 0) {
+               mail_storage_set_internal_error(aiter->iter.box->storage);
+               ret = -1;
+       }
        if (aiter->acl_name != NULL)
                str_free(&aiter->acl_name);
        i_free(aiter);