dovecot-2.2: imapc: Fixed handling escape-char

dovecot at dovecot.org dovecot at dovecot.org
Wed Aug 26 15:02:09 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/f363a7665a14
changeset: 19018:f363a7665a14
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Aug 26 17:00:55 2015 +0200
description:
imapc: Fixed handling escape-char
The current code should now handle all kinds of mailbox names correctly, including:

~/foo
%7e/bar

diffstat:

 src/lib-storage/index/imapc/imapc-list.c    |   1 +
 src/lib-storage/index/imapc/imapc-save.c    |   4 +++-
 src/lib-storage/index/imapc/imapc-storage.c |  22 ++++++++++++++--------
 3 files changed, 18 insertions(+), 9 deletions(-)

diffs (71 lines):

diff -r 0147397d9504 -r f363a7665a14 src/lib-storage/index/imapc/imapc-list.c
--- a/src/lib-storage/index/imapc/imapc-list.c	Wed Aug 26 16:59:47 2015 +0200
+++ b/src/lib-storage/index/imapc/imapc-list.c	Wed Aug 26 17:00:55 2015 +0200
@@ -176,6 +176,7 @@
 		flags++;
 	}
 
+	name = mailbox_list_escape_name(&list->list, name);
 	T_BEGIN {
 		const char *vname =
 			mailbox_list_get_vname(&list->list, name);
diff -r 0147397d9504 -r f363a7665a14 src/lib-storage/index/imapc/imapc-save.c
--- a/src/lib-storage/index/imapc/imapc-save.c	Wed Aug 26 16:59:47 2015 +0200
+++ b/src/lib-storage/index/imapc/imapc-save.c	Wed Aug 26 17:00:55 2015 +0200
@@ -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 @@
 	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);
diff -r 0147397d9504 -r f363a7665a14 src/lib-storage/index/imapc/imapc-storage.c
--- a/src/lib-storage/index/imapc/imapc-storage.c	Wed Aug 26 16:59:47 2015 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Wed Aug 26 17:00:55 2015 +0200
@@ -471,10 +471,13 @@
 	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 @@
 	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);


More information about the dovecot-cvs mailing list