From: Timo Sirainen Date: Fri, 17 Sep 2010 17:38:47 +0000 (+0100) Subject: lib-storage: If subscriptions contains an invalid entry, don't crash with fs layout. X-Git-Tag: 2.0.3~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93305d79c7e398230669d96b3af582bb738c1e05;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: If subscriptions contains an invalid entry, don't crash with fs layout. --- diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index fb565f7b87..cf0d57748b 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -680,13 +680,20 @@ fs_list_subs(struct fs_list_iterate_context *ctx) if (len > 0 && storage_name[len-1] == ns->real_sep) storage_name = t_strndup(storage_name, len-1); - path = mailbox_list_get_path(ns->list, storage_name, - MAILBOX_LIST_PATH_TYPE_DIR); - path_split(path, &dir, &fname); - if (ns->list->v.get_mailbox_flags(ns->list, dir, fname, - MAILBOX_LIST_FILE_TYPE_UNKNOWN, - &st, &ctx->info.flags) < 0) - ctx->ctx.failed = TRUE; + if (!mailbox_list_is_valid_pattern(ns->list, storage_name)) { + /* broken entry in subscriptions file */ + ctx->info.flags = MAILBOX_NONEXISTENT; + } else { + struct mailbox_list *list = ns->list; + + path = mailbox_list_get_path(list, storage_name, + MAILBOX_LIST_PATH_TYPE_DIR); + path_split(path, &dir, &fname); + if (list->v.get_mailbox_flags(list, dir, fname, + MAILBOX_LIST_FILE_TYPE_UNKNOWN, + &st, &ctx->info.flags) < 0) + ctx->ctx.failed = TRUE; + } ctx->info.flags |= flags; return &ctx->info;