]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-compression: ostreams - Add asserts to clarify how buffer flushing works
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 28 Aug 2020 14:13:32 +0000 (17:13 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 31 Aug 2020 09:38:40 +0000 (09:38 +0000)
If the output buffer isn't fully sent, the flush function returns 0 early
on, before setting flushed=TRUE.

src/lib-compression/ostream-bzlib.c
src/lib-compression/ostream-lzma.c
src/lib-compression/ostream-zlib.c
src/lib-compression/ostream-zstd.c

index 749999017abe7e2936f463c202548865a1861d2e..eef9269b10e70b5c7e4f82bcb969b1b93bebd590 100644 (file)
@@ -107,8 +107,10 @@ static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream, bool final)
 
        i_assert(zs->avail_in == 0);
 
-       if (zstream->flushed)
+       if (zstream->flushed) {
+               i_assert(zstream->outbuf_used == 0);
                return 1;
+       }
 
        if ((ret = o_stream_flush_parent_if_needed(&zstream->ostream)) <= 0)
                return ret;
@@ -152,7 +154,8 @@ static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream, bool final)
 
        if (final)
                zstream->flushed = TRUE;
-       return zstream->outbuf_used == 0 ? 1 : 0;
+       i_assert(zstream->outbuf_used == 0);
+       return 1;
 }
 
 static int o_stream_bzlib_flush(struct ostream_private *stream)
index b3e7b932a18d1b5e4dd396badcecda7798b81b2c..55716422583778fb3be78cb8bf61f5aa3237c7f3 100644 (file)
@@ -111,8 +111,10 @@ static int o_stream_lzma_send_flush(struct lzma_ostream *zstream, bool final)
 
        i_assert(zs->avail_in == 0);
 
-       if (zstream->flushed)
+       if (zstream->flushed) {
+               i_assert(zstream->outbuf_used == 0);
                return 1;
+       }
 
        if ((ret = o_stream_flush_parent_if_needed(&zstream->ostream)) <= 0)
                return ret;
@@ -153,7 +155,8 @@ static int o_stream_lzma_send_flush(struct lzma_ostream *zstream, bool final)
 
        if (final)
                zstream->flushed = TRUE;
-       return zstream->outbuf_used == 0 ? 1 : 0;
+       i_assert(zstream->outbuf_used == 0);
+       return 1;
 }
 
 static int o_stream_lzma_flush(struct ostream_private *stream)
index 2b584ec1833f1daae215484c2aa8154798a46787..f3bf4321088bf1b3e4cefe1be15ead07b2d6ecb3 100644 (file)
@@ -177,8 +177,10 @@ o_stream_zlib_send_flush(struct zlib_ostream *zstream, bool final)
 
        i_assert(zs->avail_in == 0);
 
-       if (zstream->flushed)
+       if (zstream->flushed) {
+               i_assert(zstream->outbuf_used == 0);
                return 1;
+       }
 
        if ((ret = o_stream_flush_parent_if_needed(&zstream->ostream)) <= 0)
                return ret;
@@ -227,7 +229,8 @@ o_stream_zlib_send_flush(struct zlib_ostream *zstream, bool final)
        }
        if (final)
                zstream->flushed = TRUE;
-       return zstream->outbuf_used == 0 ? 1 : 0;
+       i_assert(zstream->outbuf_used == 0);
+       return 1;
 }
 
 static int o_stream_zlib_flush(struct ostream_private *stream)
index 24dc1cccb1eae59223cd17e6012a29e975786fe0..bc3c5e2c434b43c755ecdef531c4a3f09dea2e30 100644 (file)
@@ -107,8 +107,10 @@ static int o_stream_zstd_send_flush(struct zstd_ostream *zstream, bool final)
 {
        int ret;
 
-       if (zstream->flushed)
+       if (zstream->flushed) {
+               i_assert(zstream->output.pos == 0);
                return 1;
+       }
 
        if ((ret = o_stream_flush_parent_if_needed(&zstream->ostream)) <= 0)
                return ret;
@@ -136,6 +138,7 @@ static int o_stream_zstd_send_flush(struct zstd_ostream *zstream, bool final)
 
        if (final)
                zstream->flushed = TRUE;
+       i_assert(zstream->output.pos == 0);
        return 1;
 }