]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: istream-seekable - Fix crash after write to temp file failed
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sat, 14 Sep 2019 21:08:57 +0000 (00:08 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 8 Oct 2021 07:26:42 +0000 (07:26 +0000)
Fixes:
Panic: file istream-seekable.c: line 230 (read_from_buffer): assertion failed: (*ret_r > 0)

src/lib/istream-seekable.c

index d1879fe81d86a1264ec11e60781fe1aa73aa971a..5bc19ada8ebe130701547ced8ede8dc982642932 100644 (file)
@@ -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);