]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
zlib: Avoid assert-crashing if parent ostream's write had failed earlier.
authorTimo Sirainen <tss@iki.fi>
Sat, 10 Dec 2011 05:57:16 +0000 (07:57 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 10 Dec 2011 05:57:16 +0000 (07:57 +0200)
src/plugins/zlib/ostream-bzlib.c
src/plugins/zlib/ostream-zlib.c

index 070cdc3c4616b4f514199bffe2a2ca72d4b6c899..5c3897870098cee8ff1b5997d9fd36ddaebf3128 100644 (file)
@@ -69,7 +69,12 @@ static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream)
        bool done = FALSE;
        int ret;
 
-       i_assert(zs->avail_in == 0);
+       if (zs->avail_in != 0) {
+               i_assert(zstream->ostream.ostream.last_failed_errno != 0);
+               zstream->ostream.ostream.stream_errno =
+                       zstream->ostream.ostream.last_failed_errno;
+               return -1;
+       }
 
        if (zstream->flushed)
                return 0;
index a834afebea13bb214f7ce013ebfdc764d16df278..7958526a0fcefef14a787b0981f8bfb49b0d20d5 100644 (file)
@@ -129,7 +129,12 @@ static int o_stream_zlib_send_flush(struct zlib_ostream *zstream)
        bool done = FALSE;
        int ret;
 
-       i_assert(zs->avail_in == 0);
+       if (zs->avail_in != 0) {
+               i_assert(zstream->ostream.ostream.last_failed_errno != 0);
+               zstream->ostream.ostream.stream_errno =
+                       zstream->ostream.ostream.last_failed_errno;
+               return -1;
+       }
 
        if (zstream->flushed)
                return 0;