]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mailbox list index alt separator
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Thu, 11 Mar 2021 12:31:52 +0000 (12:31 +0000)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Tue, 16 Mar 2021 15:14:23 +0000 (15:14 +0000)
To avoid collision with storage name escape character, use an
alternative char ('^') if hierarchy separator for list index is the same char.

src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-index.h

index 7f21f9f0d503e4a7e7254bbdb190a25a2004c674..36997fa8c4accb851c201a07b33ef798d1109d14 100644 (file)
@@ -61,8 +61,19 @@ static void index_list_deinit(struct mailbox_list *_list)
 
 static char index_list_get_hierarchy_sep(struct mailbox_list *list)
 {
-       return *list->ns->set->separator != '\0' ? *list->ns->set->separator :
-               MAILBOX_LIST_INDEX_HIERARCHY_SEP;
+       char sep = list->ns->set->separator[0];
+
+       if (sep == '\0')
+               sep = MAILBOX_LIST_INDEX_HIERARCHY_SEP;
+       if (sep == list->set.storage_name_escape_char) {
+               /* Separator conflicts with the escape character.
+                  Use something else. */
+               if (sep != MAILBOX_LIST_INDEX_HIERARCHY_SEP)
+                       sep = MAILBOX_LIST_INDEX_HIERARCHY_SEP;
+               else
+                       sep = MAILBOX_LIST_INDEX_HIERARCHY_ALT_SEP;
+       }
+       return sep;
 }
 
 static int
index 3bdbc94e5c16ed43fc74394b31232a7261cdd60f..427c431a0442f05d59481a7b3666ec14ba867618 100644 (file)
@@ -30,6 +30,7 @@
 #include <sys/time.h>
 
 #define MAILBOX_LIST_INDEX_HIERARCHY_SEP '~'
+#define MAILBOX_LIST_INDEX_HIERARCHY_ALT_SEP '^'
 
 #define INDEX_LIST_CONTEXT(obj) \
        MODULE_CONTEXT(obj, mailbox_list_index_module)