From d7d3f11df97aa1e816964399a07c2ef23e573abb Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 28 Feb 2010 21:22:53 +0200 Subject: [PATCH] acl: Don't assert-crash if LIST returns mailbox name ending with separator. --HG-- branch : HEAD --- src/plugins/acl/acl-mailbox-list.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/plugins/acl/acl-mailbox-list.c b/src/plugins/acl/acl-mailbox-list.c index 4df41829cf..661d6b77b6 100644 --- a/src/plugins/acl/acl-mailbox-list.c +++ b/src/plugins/acl/acl-mailbox-list.c @@ -223,15 +223,27 @@ acl_mailbox_list_iter_get_name(struct mailbox_list_iterate_context *ctx, const char *name) { struct mail_namespace *ns = ctx->list->ns; + unsigned int len; + char sep; if ((ctx->flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) == 0) - return name; + sep = ns->sep; + else { + /* Mailbox names contain namespace prefix, + except when listing INBOX. */ + if (strncmp(name, ns->prefix, ns->prefix_len) == 0) + name += ns->prefix_len; + name = mail_namespace_fix_sep(ns, name); + sep = ns->real_sep; + } - /* Mailbox names contain namespace prefix, - except when listing INBOX. */ - if (strncmp(name, ns->prefix, ns->prefix_len) == 0) - name += ns->prefix_len; - return mail_namespace_fix_sep(ns, name); + len = strlen(name); + if (name[len-1] == sep) { + /* name ends with separator. this can happen if doing e.g. + LIST "" foo/% and it lists "foo/". */ + name = t_strndup(name, len-1); + } + return name; } static bool -- 2.47.3