From: Timo Sirainen Date: Sun, 28 Feb 2010 19:22:53 +0000 (+0200) Subject: acl: Don't assert-crash if LIST returns mailbox name ending with separator. X-Git-Tag: 2.0.beta4~150 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d7d3f11df97aa1e816964399a07c2ef23e573abb;p=thirdparty%2Fdovecot%2Fcore.git acl: Don't assert-crash if LIST returns mailbox name ending with separator. --HG-- branch : HEAD --- 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