From: Siavash Tavakoli Date: Thu, 11 Mar 2021 12:31:52 +0000 (+0000) Subject: lib-storage: Add mailbox list index alt separator X-Git-Tag: 2.3.15~209 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=42ae3141988a16607fe4f2db9c58bf7c891a83d5;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mailbox list index alt separator To avoid collision with storage name escape character, use an alternative char ('^') if hierarchy separator for list index is the same char. --- diff --git a/src/lib-storage/list/mailbox-list-index-backend.c b/src/lib-storage/list/mailbox-list-index-backend.c index 7f21f9f0d5..36997fa8c4 100644 --- a/src/lib-storage/list/mailbox-list-index-backend.c +++ b/src/lib-storage/list/mailbox-list-index-backend.c @@ -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 diff --git a/src/lib-storage/list/mailbox-list-index.h b/src/lib-storage/list/mailbox-list-index.h index 3bdbc94e5c..427c431a04 100644 --- a/src/lib-storage/list/mailbox-list-index.h +++ b/src/lib-storage/list/mailbox-list-index.h @@ -30,6 +30,7 @@ #include #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)