From 12c51b003981a77946c7cc11833662489665268a Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 2 Feb 2018 18:07:43 +0200 Subject: [PATCH] lib-storage: Fix mailbox rename checking child mailbox name lengths It was supposed to prevent allowing renames that would cause any child mailbox name to be too long. However, the check wasn't working. --- src/lib-storage/mail-storage.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 692cb4520e..35fe340651 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1734,15 +1734,16 @@ int mailbox_rename_check_children(struct mailbox *src, struct mailbox *dest) size_t dest_prefix_len = strlen(dest->vname)+1; /* this can return folders with * in their name, that are not actually our children */ - const char *pattern = t_strdup_printf("%s%c*", src->vname, - mail_namespace_get_sep(src->list->ns)); + char ns_sep = mail_namespace_get_sep(src->list->ns); + const char *pattern = t_strdup_printf("%s%c*", src->vname, ns_sep); struct mailbox_list_iterate_context *iter = mailbox_list_iter_init(src->list, pattern, MAILBOX_LIST_ITER_RETURN_NO_FLAGS); const struct mailbox_info *child; while((child = mailbox_list_iter_next(iter)) != NULL) { - if (strncmp(child->vname, src->vname, src_prefix_len) != 0) + if (strncmp(child->vname, src->vname, src_prefix_len-1) != 0 || + child->vname[src_prefix_len-1] != ns_sep) continue; /* not our child */ /* if total length of new name exceeds the limit, fail */ if (strlen(child->vname + src_prefix_len)+dest_prefix_len > MAILBOX_LIST_NAME_MAX_LENGTH) { -- 2.47.3