dovecot-2.2: lzma: Reading until EOF without seeing LZMA_STREAM_...

dovecot at dovecot.org dovecot at dovecot.org
Thu Dec 12 16:37:49 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/fb157c79473e
changeset: 17059:fb157c79473e
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Dec 12 16:37:37 2013 +0200
description:
lzma: Reading until EOF without seeing LZMA_STREAM_END isn't an error.

diffstat:

 src/lib-compression/istream-lzma.c |  15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diffs (39 lines):

diff -r c0236d1c4a04 -r fb157c79473e src/lib-compression/istream-lzma.c
--- a/src/lib-compression/istream-lzma.c	Wed Dec 11 19:39:12 2013 +0200
+++ b/src/lib-compression/istream-lzma.c	Thu Dec 12 16:37:37 2013 +0200
@@ -49,6 +49,13 @@
 		i_error("%s", zstream->istream.iostream.error);
 }
 
+static void lzma_stream_end(struct lzma_istream *zstream)
+{
+	zstream->eof_offset = zstream->istream.istream.v_offset +
+		(zstream->istream.pos - zstream->istream.skip);
+	zstream->stream_size = zstream->eof_offset;
+}
+
 static ssize_t i_stream_lzma_read(struct istream_private *stream)
 {
 	struct lzma_istream *zstream = (struct lzma_istream *)stream;
@@ -109,8 +116,8 @@
 				stream->parent->stream_errno;
 		} else {
 			i_assert(stream->parent->eof);
-			lzma_read_error(zstream, "unexpected EOF");
-			stream->istream.stream_errno = EINVAL;
+			lzma_stream_end(zstream);
+			stream->istream.eof = TRUE;
 		}
 		return -1;
 	}
@@ -153,9 +160,7 @@
 		i_fatal_status(FATAL_OUTOFMEM, "lzma.read(%s): Out of memory",
 			       i_stream_get_name(&stream->istream));
 	case LZMA_STREAM_END:
-		zstream->eof_offset = stream->istream.v_offset +
-			(stream->pos - stream->skip);
-		zstream->stream_size = zstream->eof_offset;
+		lzma_stream_end(zstream);
 		if (out_size == 0) {
 			stream->istream.eof = TRUE;
 			return -1;


More information about the dovecot-cvs mailing list