From 9fd67614441755b32e5dab04c2f9fbc24cb0a480 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 21 Mar 2023 21:35:04 +0200 Subject: [PATCH] lib-dict-extra: dict-fs - If iteration flag isn't supported, error out instead of panic --- src/lib-dict-extra/dict-fs.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib-dict-extra/dict-fs.c b/src/lib-dict-extra/dict-fs.c index 43178c837e..b6bb617145 100644 --- a/src/lib-dict-extra/dict-fs.c +++ b/src/lib-dict-extra/dict-fs.c @@ -155,11 +155,6 @@ fs_dict_iterate_init(struct dict *_dict, const struct dict_op_settings *set, struct fs_dict *dict = (struct fs_dict *)_dict; struct fs_dict_iterate_context *iter; - /* these flags are not supported for now */ - i_assert((flags & DICT_ITERATE_FLAG_RECURSE) == 0); - i_assert((flags & (DICT_ITERATE_FLAG_SORT_BY_KEY | - DICT_ITERATE_FLAG_SORT_BY_VALUE)) == 0); - iter = i_new(struct fs_dict_iterate_context, 1); iter->ctx.dict = _dict; iter->path = i_strdup(path); @@ -167,6 +162,18 @@ fs_dict_iterate_init(struct dict *_dict, const struct dict_op_settings *set, iter->value_pool = pool_alloconly_create("iterate value pool", 128); iter->fs_iter = fs_iter_init(dict->fs, fs_dict_get_full_key(set->username, path), 0); + + const char *unsupported = NULL; + if ((flags & DICT_ITERATE_FLAG_RECURSE) != 0) + unsupported = "DICT_ITERATE_FLAG_RECURSE"; + else if ((flags & DICT_ITERATE_FLAG_SORT_BY_KEY) != 0) + unsupported = "DICT_ITERATE_FLAG_SORT_BY_KEY"; + else if ((flags & DICT_ITERATE_FLAG_SORT_BY_VALUE) != 0) + unsupported = "DICT_ITERATE_FLAG_SORT_BY_VALUE"; + if (unsupported != NULL) { + iter->error = i_strdup_printf( + "dict-fs doesn't currently support %s", unsupported); + } return &iter->ctx; } -- 2.47.3