]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
zlib: eof_offset wasn't always set right, causing assert-crashes.
authorTimo Sirainen <tss@iki.fi>
Fri, 1 Oct 2010 16:46:03 +0000 (17:46 +0100)
committerTimo Sirainen <tss@iki.fi>
Fri, 1 Oct 2010 16:46:03 +0000 (17:46 +0100)
src/plugins/zlib/istream-bzlib.c
src/plugins/zlib/istream-zlib.c

index d92dbc3d438f4cf740853cfec9584ea622c30129..b77a1b9e93f801a48e122c044c2ffa769849b479 100644 (file)
@@ -152,7 +152,8 @@ static ssize_t i_stream_bzlib_read(struct istream_private *stream)
                i_fatal_status(FATAL_OUTOFMEM, "bzlib.read(%s): Out of memory",
                               i_stream_get_name(&stream->istream));
        case BZ_STREAM_END:
-               zstream->eof_offset = stream->istream.v_offset + stream->pos;
+               zstream->eof_offset = stream->istream.v_offset +
+                       (stream->pos - stream->skip);
                if (size == 0) {
                        stream->istream.eof = TRUE;
                        return -1;
index 84a8a46ebd6a4201f8e9c249710231acb49ea833..7a325cd4c96189a71b815e1f1f67ec682c8145da 100644 (file)
@@ -287,7 +287,8 @@ static ssize_t i_stream_zlib_read(struct istream_private *stream)
                i_fatal_status(FATAL_OUTOFMEM, "zlib.read(%s): Out of memory",
                               i_stream_get_name(&stream->istream));
        case Z_STREAM_END:
-               zstream->eof_offset = stream->istream.v_offset + stream->pos;
+               zstream->eof_offset = stream->istream.v_offset +
+                       (stream->pos - stream->skip);
                i_stream_skip(stream->parent,
                              zstream->prev_size - zstream->zs.avail_in);
                zstream->zs.avail_in = 0;