Mercurial > dovecot > core-2.2
changeset 20516:5bef6977c15e
lib-storage: Fixed crash on subscription listing if subscription refresh fails.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 11 Jul 2016 11:28:10 +0300 |
parents | 84cd7e08e8d6 |
children | c4a1368cd868 |
files | src/lib-storage/list/mailbox-list-iter.c |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-iter.c Sat Jul 09 20:11:45 2016 +0300 +++ b/src/lib-storage/list/mailbox-list-iter.c Mon Jul 11 11:28:10 2016 +0300 @@ -57,6 +57,8 @@ struct mail_namespace *ns, const char *prefix); +static struct mailbox_list_iterate_context mailbox_list_iter_failed; + struct mailbox_list_iterate_context * mailbox_list_iter_init(struct mailbox_list *list, const char *pattern, enum mailbox_list_iter_flags flags) @@ -167,8 +169,11 @@ i_assert(*patterns != NULL); if ((flags & (MAILBOX_LIST_ITER_SELECT_SUBSCRIBED | - MAILBOX_LIST_ITER_RETURN_SUBSCRIBED)) != 0) + MAILBOX_LIST_ITER_RETURN_SUBSCRIBED)) != 0) { ret = mailbox_list_iter_subscriptions_refresh(list); + if (ret < 0) + return &mailbox_list_iter_failed; + } ctx = list->v.iter_init(list, patterns, flags); if (ret < 0) @@ -1022,6 +1027,8 @@ { const struct mailbox_info *info; + if (ctx == &mailbox_list_iter_failed) + return NULL; do { T_BEGIN { if (ctx->autocreate_ctx != NULL) @@ -1039,6 +1046,8 @@ *_ctx = NULL; + if (ctx == &mailbox_list_iter_failed) + return -1; return ctx->list->v.iter_deinit(ctx); }