From: Timo Sirainen Date: Thu, 12 Dec 2013 14:37:37 +0000 (+0200) Subject: lzma: Reading until EOF without seeing LZMA_STREAM_END isn't an error. X-Git-Tag: 2.2.10~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62c05ba0290a0bf9c2b0ab4ce117f9a736907c21;p=thirdparty%2Fdovecot%2Fcore.git lzma: Reading until EOF without seeing LZMA_STREAM_END isn't an error. --- diff --git a/src/lib-compression/istream-lzma.c b/src/lib-compression/istream-lzma.c index 03b9520b3e..26f0f5abf9 100644 --- a/src/lib-compression/istream-lzma.c +++ b/src/lib-compression/istream-lzma.c @@ -49,6 +49,13 @@ static void lzma_read_error(struct lzma_istream *zstream, const char *error) 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 @@ static ssize_t i_stream_lzma_read(struct istream_private *stream) 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 @@ static ssize_t i_stream_lzma_read(struct istream_private *stream) 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;