]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fixed handling escape-char
authorTimo Sirainen <tss@iki.fi>
Wed, 26 Aug 2015 15:00:55 +0000 (17:00 +0200)
committerTimo Sirainen <tss@iki.fi>
Wed, 26 Aug 2015 15:00:55 +0000 (17:00 +0200)
The current code should now handle all kinds of mailbox names correctly, including:

~/foo
%7e/bar

src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/index/imapc/imapc-save.c
src/lib-storage/index/imapc/imapc-storage.c

index 25ce1db9ce7e0d44c1ec5ba4561b2221154bb8ee..fb8a9a624f1c7679c04f971d172d482d725fd2bb 100644 (file)
@@ -176,6 +176,7 @@ imapc_list_update_tree(struct imapc_mailbox_list *list,
                flags++;
        }
 
+       name = mailbox_list_escape_name(&list->list, name);
        T_BEGIN {
                const char *vname =
                        mailbox_list_get_vname(&list->list, name);
index d7396adcd4fdcd5bc1e7228d6ff61e6986c8a996..fd51092b9636790d73fe296e8bdffb15369ea2bc 100644 (file)
@@ -10,6 +10,7 @@
 #include "index-mail.h"
 #include "mail-copy.h"
 #include "imapc-client.h"
+#include "mailbox-list-private.h"
 #include "imapc-storage.h"
 #include "imapc-sync.h"
 #include "imapc-mail.h"
@@ -245,7 +246,8 @@ static int imapc_save_append(struct imapc_save_context *ctx)
        cmd = imapc_client_cmd(ctx->mbox->storage->client->client,
                               imapc_save_callback, &sctx);
        imapc_command_sendf(cmd, "APPEND %s%1s%1s %p",
-                           ctx->mbox->box.name, flags, internaldate, input);
+               mailbox_list_unescape_name(ctx->mbox->box.list, ctx->mbox->box.name),
+               flags, internaldate, input);
        i_stream_unref(&input);
        while (sctx.ret == -2)
                imapc_mailbox_run(ctx->mbox);
index b661a6e534903c24dbe6ce8a9930a2b01e439f39..a2c8dd467ea3dd557c806cdab9b328263414881a 100644 (file)
@@ -471,10 +471,13 @@ static void imapc_mailbox_reopen(void *context)
        cmd = imapc_client_mailbox_cmd(mbox->client_box,
                                       imapc_mailbox_reopen_callback, mbox);
        imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_SELECT);
-       if (imapc_mailbox_want_examine(mbox))
-               imapc_command_sendf(cmd, "EXAMINE %s", mbox->box.name);
-       else
-               imapc_command_sendf(cmd, "SELECT %s", mbox->box.name);
+       if (imapc_mailbox_want_examine(mbox)) {
+               imapc_command_sendf(cmd, "EXAMINE %s",
+                       mailbox_list_unescape_name(mbox->box.list, mbox->box.name));
+       } else {
+               imapc_command_sendf(cmd, "SELECT %s",
+                       mailbox_list_unescape_name(mbox->box.list, mbox->box.name));
+       }
        mbox->storage->reopen_count++;
 
        if (mbox->syncing)
@@ -546,10 +549,13 @@ int imapc_mailbox_select(struct imapc_mailbox *mbox)
        cmd = imapc_client_mailbox_cmd(mbox->client_box,
                                       imapc_mailbox_open_callback, &ctx);
        imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_SELECT);
-       if (imapc_mailbox_want_examine(mbox))
-               imapc_command_sendf(cmd, "EXAMINE %s", mbox->box.name);
-       else
-               imapc_command_sendf(cmd, "SELECT %s", mbox->box.name);
+       if (imapc_mailbox_want_examine(mbox)) {
+               imapc_command_sendf(cmd, "EXAMINE %s",
+                       mailbox_list_unescape_name(mbox->box.list, mbox->box.name));
+       } else {
+               imapc_command_sendf(cmd, "SELECT %s",
+                       mailbox_list_unescape_name(mbox->box.list, mbox->box.name));
+       }
 
        while (ctx.ret == -2)
                imapc_mailbox_run(mbox);