From: Manuel Mausz Date: Tue, 26 Jul 2022 08:07:31 +0000 (+0200) Subject: lib-dict-extra: dict-fs - Fix endless loop while iterating X-Git-Tag: 2.4.0~2590 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=180a06ed49894af4a6dfad9c4959046928dfd117;p=thirdparty%2Fdovecot%2Fcore.git lib-dict-extra: dict-fs - Fix endless loop while iterating Broken by 32e8bd5b5a9d5bc04e5ac6c65ac132ba5c386d64 --- diff --git a/src/lib-dict-extra/dict-fs.c b/src/lib-dict-extra/dict-fs.c index 1ff662e891..99f9511a62 100644 --- a/src/lib-dict-extra/dict-fs.c +++ b/src/lib-dict-extra/dict-fs.c @@ -174,7 +174,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; @@ -182,17 +181,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) { *key_r = path;