50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
|
From 4ff4bd024a9b6e7973b76b186ce085c2ca669d3e Mon Sep 17 00:00:00 2001
|
||
|
From: Aki Tuomi <aki.tuomi@dovecot.fi>
|
||
|
Date: Thu, 24 May 2018 12:48:58 +0000
|
||
|
Subject: [PATCH] acl: Fix return value of acl_attribute_get_acl
|
||
|
|
||
|
If matching acl entry is not found, it must return 0
|
||
|
and not 1 because it did not find anything.
|
||
|
|
||
|
Fixes dsync: Panic: file mailbox-attribute.c: line 362 (mailbox_attribute_get_stream): assertion failed: (value_r->value != NULL || value_r->value_stream != NULL)
|
||
|
|
||
|
Broken in 37c72fa0cd3f1d74d79b64afb3fb6da5ffd4fe3a
|
||
|
|
||
|
Found by @dl8bh
|
||
|
---
|
||
|
src/plugins/acl/acl-attributes.c | 10 ++++++++--
|
||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/plugins/acl/acl-attributes.c b/src/plugins/acl/acl-attributes.c
|
||
|
index 2499a30f9c..f0d3177de4 100644
|
||
|
--- a/src/plugins/acl/acl-attributes.c
|
||
|
+++ b/src/plugins/acl/acl-attributes.c
|
||
|
@@ -60,7 +60,7 @@ static int acl_attribute_get_acl(struct mailbox *box, const char *key,
|
||
|
struct acl_object_list_iter *iter;
|
||
|
struct acl_rights rights, wanted_rights;
|
||
|
const char *id;
|
||
|
- int ret;
|
||
|
+ int ret = 0;
|
||
|
|
||
|
i_zero(value_r);
|
||
|
|
||
|
@@ -88,11 +88,17 @@ static int acl_attribute_get_acl(struct mailbox *box, const char *key,
|
||
|
rights.id_type == wanted_rights.id_type &&
|
||
|
null_strcmp(rights.identifier, wanted_rights.identifier) == 0) {
|
||
|
value_r->value = acl_rights_export(&rights);
|
||
|
+ ret = 1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
- if ((ret = acl_object_list_deinit(&iter)) < 0)
|
||
|
+ /* the return value here cannot be used, because this function
|
||
|
+ needs to return whether it actually matched something
|
||
|
+ or not */
|
||
|
+ if (acl_object_list_deinit(&iter) < 0) {
|
||
|
mail_storage_set_internal_error(box->storage);
|
||
|
+ ret = -1;
|
||
|
+ }
|
||
|
return ret;
|
||
|
}
|
||
|
|