From: Timo Sirainen Date: Mon, 4 Aug 2008 14:16:32 +0000 (-0400) Subject: mbox: Saving may have truncated the mail being saved. X-Git-Tag: 1.2.alpha1~100 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1ce4a44f63dcf0a3d3f8a3a0a46c3a6de1655f3;p=thirdparty%2Fdovecot%2Fcore.git mbox: Saving may have truncated the mail being saved. save_continue() must not return if there's still data to be saved and index_mail_cache_parse_continue() may read more of it, so make sure after calling that the save input is handled. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/mbox/mbox-save.c b/src/lib-storage/index/mbox/mbox-save.c index 7573cf2c1d..a119e52daf 100644 --- a/src/lib-storage/index/mbox/mbox-save.c +++ b/src/lib-storage/index/mbox/mbox-save.c @@ -577,11 +577,9 @@ int mbox_save_continue(struct mail_save_context *_ctx) return mbox_save_body(ctx); } - while ((ret = i_stream_read(ctx->input)) != -1) { + while ((ret = i_stream_read(ctx->input)) > 0) { if (ctx->mail != NULL) index_mail_cache_parse_continue(ctx->mail); - if (ret == 0) - return 0; data = i_stream_get_data(ctx->input, &size); for (i = 0; i < size; i++) { @@ -608,6 +606,8 @@ int mbox_save_continue(struct mail_save_context *_ctx) ctx->last_char = data[size-1]; i_stream_skip(ctx->input, size); } + if (ret == 0) + return 0; if (ctx->last_char != '\n') { if (o_stream_send(ctx->output, "\n", 1) < 0)