]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: If mailbox iteration fails, make sure error message isn't lost.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 12 Jun 2017 11:35:22 +0000 (14:35 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 13 Jun 2017 09:06:42 +0000 (12:06 +0300)
src/lib-storage/index/imapc/imapc-list.c

index 0d0727a11fbae0fcb824eef17878aaf18d47825e..16fca00699b1dce5ea20fb4b5edac51910f998a5 100644 (file)
@@ -648,7 +648,9 @@ imapc_list_iter_init(struct mailbox_list *_list, const char *const *patterns,
                return _ctx;
        }
 
-       ns_sep = mail_namespace_get_sep(_list->ns);
+       /* if we've already failed, make sure we don't call
+          mailbox_list_get_hierarchy_sep(), since it clears the error */
+       ns_sep = ret < 0 ? '/' : mail_namespace_get_sep(_list->ns);
 
        pool = pool_alloconly_create("mailbox list imapc iter", 1024);
        ctx = p_new(pool, struct imapc_mailbox_list_iterate_context, 1);
@@ -662,7 +664,8 @@ imapc_list_iter_init(struct mailbox_list *_list, const char *const *patterns,
 
        ctx->tree = mailbox_tree_init(ns_sep);
        mailbox_tree_set_parents_nonexistent(ctx->tree);
-       imapc_list_build_match_tree(ctx);
+       if (ret == 0)
+               imapc_list_build_match_tree(ctx);
 
        if (list->list.ns->prefix_len > 0) {
                ns_root_name = t_strndup(_list->ns->prefix,