From: Timo Sirainen Date: Tue, 9 Jun 2020 08:40:53 +0000 (+0300) Subject: lib-compression: istream-zstd - Fix infinite loop when istream is nonblocking X-Git-Tag: 2.3.13~515 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0fb7f89740ef38d511ea8ef8ec48046296b08ac5;p=thirdparty%2Fdovecot%2Fcore.git lib-compression: istream-zstd - Fix infinite loop when istream is nonblocking --- diff --git a/src/lib-compression/istream-zstd.c b/src/lib-compression/istream-zstd.c index d19594b19a..7f3d71cfd8 100644 --- a/src/lib-compression/istream-zstd.c +++ b/src/lib-compression/istream-zstd.c @@ -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());