Mercurial > dovecot > core-2.2
diff src/lib-mail/istream-binary-converter.c @ 19586:f9d75e6e1618
lib-mail: istream-binary-converter lost last few chars from root-level binary content.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 18 Jan 2016 14:57:45 +0200 |
parents | 0f22db71df7a |
children | 3675442a1515 |
line wrap: on
line diff
--- a/src/lib-mail/istream-binary-converter.c Mon Jan 18 14:56:47 2016 +0200 +++ b/src/lib-mail/istream-binary-converter.c Mon Jan 18 14:57:45 2016 +0200 @@ -182,10 +182,19 @@ if (stream->pos - stream->skip >= stream->max_buffer_size) return -2; + old_size = stream->pos - stream->skip; switch (message_parser_parse_next_block(bstream->parser, &block)) { case -1: /* done / error */ + if (bstream->convert_part != NULL && + bstream->base64_delayed_len > 0) { + /* flush any pending base64 output */ + stream_encode_base64(bstream, "", 0); + new_size = stream->pos - stream->skip; + i_assert(old_size != new_size); + return new_size - old_size; + } stream->istream.eof = TRUE; stream->istream.stream_errno = stream->parent->stream_errno; return -1; @@ -196,8 +205,6 @@ break; } - old_size = stream->pos - stream->skip; - if (block.part != bstream->convert_part && bstream->convert_part != NULL) { /* end of base64 encoded part */