dovecot-2.2: imap: Don't leak mailboxes on CATENATE errors.
dovecot at dovecot.org
dovecot at dovecot.org
Sun Feb 24 16:02:57 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/514b8fc1e278
changeset: 15915:514b8fc1e278
user: Timo Sirainen <tss at iki.fi>
date: Sun Feb 24 16:02:47 2013 +0200
description:
imap: Don't leak mailboxes on CATENATE errors.
diffstat:
src/imap/cmd-append.c | 49 +++++++++++++++++++++++++++++--------------------
1 files changed, 29 insertions(+), 20 deletions(-)
diffs (87 lines):
diff -r 12f12add18d2 -r 514b8fc1e278 src/imap/cmd-append.c
--- a/src/imap/cmd-append.c Sun Feb 24 15:26:53 2013 +0200
+++ b/src/imap/cmd-append.c Sun Feb 24 16:02:47 2013 +0200
@@ -156,31 +156,15 @@
}
static int
-cmd_append_catenate_url(struct client_command_context *cmd, const char *caturl)
+cmd_append_catenate_mpurl(struct client_command_context *cmd,
+ const char *caturl, struct imap_msgpart_url *mpurl)
{
struct cmd_append_context *ctx = cmd->context;
- struct imap_msgpart_url *mpurl;
struct imap_msgpart_open_result mpresult;
uoff_t newsize;
const char *error;
int ret;
- if (ctx->failed)
- return -1;
-
- ret = imap_msgpart_url_parse(cmd->client->user, cmd->client->mailbox,
- caturl, &mpurl, &error);
- if (ret < 0) {
- client_send_storage_error(cmd, ctx->storage);
- return -1;
- }
- if (ret == 0) {
- /* invalid url, abort */
- client_send_tagline(cmd,
- t_strdup_printf("NO [BADURL %s] %s.", caturl, error));
- return -1;
- }
-
/* catenate URL */
ret = imap_msgpart_url_read_part(mpurl, &mpresult, &error);
if (ret < 0) {
@@ -195,7 +179,6 @@
}
if (mpresult.size == 0) {
/* empty input */
- imap_msgpart_url_free(&mpurl);
return 0;
}
@@ -203,7 +186,6 @@
if (newsize < ctx->cat_msg_size) {
client_send_tagline(cmd,
"NO [TOOBIG] Composed message grows too big.");
- imap_msgpart_url_free(&mpurl);
return -1;
}
@@ -235,6 +217,33 @@
i_assert(!i_stream_have_bytes_left(mpresult.input));
ret = 0;
}
+ return ret;
+}
+
+static int
+cmd_append_catenate_url(struct client_command_context *cmd, const char *caturl)
+{
+ struct cmd_append_context *ctx = cmd->context;
+ struct imap_msgpart_url *mpurl;
+ const char *error;
+ int ret;
+
+ if (ctx->failed)
+ return -1;
+
+ ret = imap_msgpart_url_parse(cmd->client->user, cmd->client->mailbox,
+ caturl, &mpurl, &error);
+ if (ret < 0) {
+ client_send_storage_error(cmd, ctx->storage);
+ return -1;
+ }
+ if (ret == 0) {
+ /* invalid url, abort */
+ client_send_tagline(cmd,
+ t_strdup_printf("NO [BADURL %s] %s.", caturl, error));
+ return -1;
+ }
+ ret = cmd_append_catenate_mpurl(cmd, caturl, mpurl);
imap_msgpart_url_free(&mpurl);
return ret;
}
More information about the dovecot-cvs
mailing list