From d7cd00e78639334c9fa4139008ba22f926c5a3b2 Mon Sep 17 00:00:00 2001 From: Manuel Mausz Date: Tue, 26 Jul 2022 10:07:31 +0200 Subject: [PATCH] lib-dict-extra: dict-fs - Fix endless loop while iterating Broken by 32e8bd5b5a9d5bc04e5ac6c65ac132ba5c386d64 --- src/lib-dict-extra/dict-fs.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/lib-dict-extra/dict-fs.c b/src/lib-dict-extra/dict-fs.c index 4c173e3f74..b83f657045 100644 --- a/src/lib-dict-extra/dict-fs.c +++ b/src/lib-dict-extra/dict-fs.c @@ -175,7 +175,6 @@ static bool fs_dict_iterate(struct dict_iterate_context *ctx, { struct fs_dict_iterate_context *iter = (struct fs_dict_iterate_context *)ctx; - struct fs_dict *dict = (struct fs_dict *)ctx->dict; const char *path, *error; int ret; @@ -183,17 +182,9 @@ static bool fs_dict_iterate(struct dict_iterate_context *ctx, return FALSE; *key_r = fs_iter_next(iter->fs_iter); - if (*key_r == NULL) { - if (fs_iter_deinit(&iter->fs_iter, &error) < 0) { - iter->error = i_strdup(error); - return FALSE; - } - if (iter->path == NULL) - return FALSE; - path = fs_dict_get_full_key(ctx->set.username, iter->path); - iter->fs_iter = fs_iter_init(dict->fs, path, 0); - return fs_dict_iterate(ctx, key_r, values_r); - } + if (*key_r == NULL) + return FALSE; + path = t_strconcat(iter->path, *key_r, NULL); if ((iter->flags & DICT_ITERATE_FLAG_NO_VALUE) != 0) { iter->values[0] = NULL; -- 2.47.3