dovecot-2.2: lib-storage: Fixed listescape when escape_char was ...

dovecot at dovecot.org dovecot at dovecot.org
Sat Sep 21 23:35:28 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/fce84463f508
changeset: 16800:fce84463f508
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Sep 21 23:33:42 2013 +0300
description:
lib-storage: Fixed listescape when escape_char was the same as namespace separator.

diffstat:

 src/lib-storage/mailbox-list.c |  12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diffs (43 lines):

diff -r c019b298e0f6 -r fce84463f508 src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c	Sat Sep 21 05:28:45 2013 +0300
+++ b/src/lib-storage/mailbox-list.c	Sat Sep 21 23:33:42 2013 +0300
@@ -429,7 +429,7 @@
 	}
 	for (; *vname != '\0'; vname++) {
 		if (*vname == ns_sep)
-			str_append_c(escaped_name, *vname);
+			str_append_c(escaped_name, list_sep);
 		else if (*vname == list_sep ||
 			 *vname == list->set.escape_char ||
 			 *vname == '/' ||
@@ -541,7 +541,7 @@
 		storage_name = "INBOX";
 	}
 
-	if (list_sep != ns_sep) {
+	if (list_sep != ns_sep && list->set.escape_char == '\0') {
 		if (ns->type == MAIL_NAMESPACE_TYPE_SHARED &&
 		    (ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) {
 			/* shared namespace root. the backend storage's
@@ -689,6 +689,12 @@
 	}
 
 	prefix_len = strlen(list->ns->prefix);
+	if (list->set.escape_char != '\0') {
+		vname = mailbox_list_unescape_name(list, vname);
+		return prefix_len == 0 ? vname :
+			t_strconcat(list->ns->prefix, vname, NULL);
+	}
+
 	list_sep = mailbox_list_get_hierarchy_sep(list);
 	ns_sep = mail_namespace_get_sep(list->ns);
 
@@ -704,8 +710,6 @@
 		ret[i + prefix_len] = '\0';
 		vname = ret;
 	}
-	if (list->set.escape_char != '\0')
-		vname = mailbox_list_unescape_name(list, vname);
 	return vname;
 }
 


More information about the dovecot-cvs mailing list