changeset 12982:c22e5e7c0dcd

lib-storage: Treat "namespace prefix/" as invalid mailbox name.
author Timo Sirainen <tss@iki.fi>
date Fri, 03 Jun 2011 16:27:41 +0300
parents 189c9baf840a
children c0b40ebc527d
files src/lib-storage/mail-storage.c
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-storage.c	Mon May 23 16:12:44 2011 +0300
+++ b/src/lib-storage/mail-storage.c	Fri Jun 03 16:27:41 2011 +0300
@@ -645,19 +645,27 @@
 	list_sep = mailbox_list_get_hierarchy_sep(box->list);
 	ns_sep = mail_namespace_get_sep(ns);
 
-	if (ns_sep == list_sep || box->list->set.escape_char != '\0')
-		return 0;
-
 	if (ns->prefix_len > 0) {
-		/* vname is prefix with or without separator */
+		/* vname is either "namespace/box" or "namespace" */
 		i_assert(strncmp(vname, ns->prefix, ns->prefix_len-1) == 0);
 		vname += ns->prefix_len - 1;
 		if (vname[0] != '\0') {
 			i_assert(vname[0] == ns->prefix[ns->prefix_len-1]);
 			vname++;
+
+			if (vname[0] == '\0') {
+				/* "namespace/" isn't a valid mailbox name. */
+				mail_storage_set_error(box->storage,
+						       MAIL_ERROR_PARAMS,
+						       "Invalid mailbox name");
+				return -1;
+			}
 		}
 	}
 
+	if (ns_sep == list_sep || box->list->set.escape_char != '\0')
+		return 0;
+
 	for (p = vname; *p != '\0'; p++) {
 		if (*p == list_sep) {
 			mail_storage_set_error(box->storage, MAIL_ERROR_PARAMS,