Mercurial > dovecot > core-2.2
changeset 14737:1af9d08e67d7
imap: CATENATE command fixes.
Patch by Stephan Bosch
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 31 Jul 2012 02:46:21 +0300 |
parents | 4d518c1a366c |
children | c3a781ef0aeb |
files | src/imap/cmd-append.c src/lib-imap-storage/imap-msgpart-url.c src/lib/uri-util.c |
diffstat | 3 files changed, 19 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-append.c Tue Jul 31 02:45:23 2012 +0300 +++ b/src/imap/cmd-append.c Tue Jul 31 02:46:21 2012 +0300 @@ -59,9 +59,9 @@ str_printfa(str, "Disconnected in APPEND (%u msgs, %u secs", ctx->count, secs); - if (ctx->input != NULL) { + if (ctx->litinput != NULL) { str_printfa(str, ", %"PRIuUOFF_T"/%"PRIuUOFF_T" bytes", - ctx->input->v_offset, ctx->literal_size); + ctx->litinput->v_offset, ctx->literal_size); } str_append_c(str, ')'); return str_c(str); @@ -156,8 +156,8 @@ return TRUE; } - (void)i_stream_read(ctx->input); - i_stream_skip(ctx->input, i_stream_get_data_size(ctx->input)); + (void)i_stream_read(ctx->litinput); + i_stream_skip(ctx->litinput, i_stream_get_data_size(ctx->litinput)); if (cmd->client->input->closed) { cmd_append_finish(ctx); @@ -189,7 +189,7 @@ /* we have to read the nonsynced literal so we don't treat the message data as commands. */ - ctx->input = i_stream_create_limit(ctx->client->input, ctx->literal_size); + ctx->litinput = i_stream_create_limit(ctx->client->input, ctx->literal_size); ctx->message_input = TRUE; ctx->cmd->func = cmd_append_continue_cancel; @@ -249,17 +249,16 @@ ctx->cat_msg_size = newsize; /* add this input stream to chain */ i_stream_chain_append(ctx->catchain, input); - input = NULL; /* save by reading the chain stream */ - while (!i_stream_is_eof(ctx->input)) { - ret = i_stream_read(ctx->input); + while (!i_stream_is_eof(input)) { + ret = i_stream_read(input); i_assert(ret != 0); /* we can handle only blocking input here */ if (mailbox_save_continue(ctx->save_ctx) < 0 || ret == -1) break; } - if (ctx->input->stream_errno != 0) { - errno = ctx->input->stream_errno; + if (input->stream_errno != 0) { + errno = input->stream_errno; mail_storage_set_critical(ctx->box->storage, "read(%s) failed: %m (for CATENATE URL %s)", i_stream_get_name(input), caturl); @@ -719,7 +718,7 @@ if (ctx->save_ctx != NULL) { while (ctx->litinput->v_offset != ctx->literal_size) { - ret = i_stream_read(ctx->input); + ret = i_stream_read(ctx->litinput); if (mailbox_save_continue(ctx->save_ctx) < 0) { /* we still have to finish reading the message from client */ @@ -732,8 +731,8 @@ } if (ctx->save_ctx == NULL) { - (void)i_stream_read(ctx->input); - i_stream_skip(ctx->input, i_stream_get_data_size(ctx->input)); + (void)i_stream_read(ctx->litinput); + i_stream_skip(ctx->litinput, i_stream_get_data_size(ctx->litinput)); } if (ctx->litinput->eof || client->input->closed) {
--- a/src/lib-imap-storage/imap-msgpart-url.c Tue Jul 31 02:45:23 2012 +0300 +++ b/src/lib-imap-storage/imap-msgpart-url.c Tue Jul 31 02:46:21 2012 +0300 @@ -67,18 +67,18 @@ if (imap_url_parse(urlstr, &base_url, IMAP_URL_PARSE_REQUIRE_RELATIVE, &url, &error) < 0) { *error_r = t_strconcat("Invalid IMAP URL: ", error, NULL); - return -1; + return 0; } if (url->mailbox == NULL) { *error_r = "Mailbox-relative IMAP URL, but no mailbox selected"; - return -1; + return 0; } if (url->uid == 0 || url->search_program != NULL) { *error_r = "Invalid messagepart IMAP URL"; - return -1; + return 0; } *url_r = imap_msgpart_url_create(user, url); - return 0; + return 1; } struct mailbox *imap_msgpart_url_get_mailbox(struct imap_msgpart_url *mpurl) @@ -168,12 +168,13 @@ imap_msgpart_url_open_part(struct imap_msgpart_url *mpurl, struct mail **mail_r, struct imap_msgpart **msgpart_r, const char **error_r) { + const char *section = mpurl->section == NULL ? "" : mpurl->section; int ret; if ((ret = imap_msgpart_url_open_mail(mpurl, mail_r, error_r)) <= 0) return ret; - if (imap_msgpart_parse((*mail_r)->box, mpurl->section, msgpart_r) < 0) { + if (imap_msgpart_parse((*mail_r)->box, section, msgpart_r) < 0) { *error_r = "Invalid section"; return 0; }