]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-compression: istream-zstd - Fix infinite loop when istream is nonblocking
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 9 Jun 2020 08:40:53 +0000 (11:40 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 9 Jun 2020 09:24:16 +0000 (12:24 +0300)
src/lib-compression/istream-zstd.c

index d19594b19ac51895d93528a16a7f2f90acacc07a..7f3d71cfd810305b613145a97cdf8ddb76e2be47 100644 (file)
@@ -138,6 +138,8 @@ static ssize_t i_stream_zstd_read(struct istream_private *stream)
                                        stream->istream.stream_errno = EPIPE;
                                return ret;
                        }
+                       if (ret == 0)
+                               return 0;
                        buffer_append(zstream->frame_buffer, data, size);
                        i_stream_skip(stream->parent, size);
                        zstream->input.src = zstream->frame_buffer->data;
@@ -145,6 +147,7 @@ static ssize_t i_stream_zstd_read(struct istream_private *stream)
                        zstream->input.pos = 0;
                }
 
+               i_assert(zstream->input.size > 0);
                i_assert(zstream->data_buffer->used == 0);
                zstream->output.dst = buffer_append_space_unsafe(zstream->data_buffer,
                                                                 ZSTD_DStreamOutSize());