From: Timo Sirainen Date: Sat, 14 Sep 2019 21:08:57 +0000 (+0300) Subject: lib: istream-seekable - Fix crash after write to temp file failed X-Git-Tag: 2.3.18~220 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=43d7f354c44b358f45ddd10deb3742ec1cc94889;p=thirdparty%2Fdovecot%2Fcore.git lib: istream-seekable - Fix crash after write to temp file failed Fixes: Panic: file istream-seekable.c: line 230 (read_from_buffer): assertion failed: (*ret_r > 0) --- diff --git a/src/lib/istream-seekable.c b/src/lib/istream-seekable.c index d1879fe81d..5bc19ada8e 100644 --- a/src/lib/istream-seekable.c +++ b/src/lib/istream-seekable.c @@ -197,6 +197,10 @@ static bool read_from_buffer(struct seekable_istream *sstream, ssize_t *ret_r) stream->skip = stream->istream.v_offset; stream->pos = sstream->buffer_peak; size = stream->pos - stream->skip; + if (stream->istream.v_offset == sstream->buffer_peak) { + /* this could happen after write to temp file failed */ + return read_from_buffer(sstream, ret_r); + } } else { /* need to read more */ i_assert(stream->pos == sstream->buffer_peak);