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 */