]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: istream-seekable - Fix moving stream to memory on write() failure
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 3 Jun 2024 20:05:22 +0000 (23:05 +0300)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Tue, 3 Dec 2024 13:36:36 +0000 (14:36 +0100)
Fixes:
Panic: file istream-seekable.c: line 238 (read_from_buffer): assertion failed: (*ret_r > 0)

src/lib/istream-seekable.c

index 76c0c2f46957e4472e01a0e50b1f6031d0b2f55d..9c7d294052726848b578863855c5a59df431f987 100644 (file)
@@ -192,6 +192,7 @@ static bool read_from_buffer(struct seekable_istream *sstream, ssize_t *ret_r)
                /* This could be the first read() or we could have already
                   seeked backwards. */
                i_assert(stream->pos == 0 && stream->skip == 0);
+               i_assert(sstream->buffer_peak >= stream->istream.v_offset);
                stream->skip = stream->istream.v_offset;
                stream->pos = sstream->buffer_peak;
                size = stream->pos - stream->skip;
@@ -259,6 +260,7 @@ static int i_stream_seekable_write_failed(struct seekable_istream *sstream)
                                    sstream->temp_path);
                return -1;
        }
+       sstream->buffer_peak = sstream->write_peak;
        i_stream_destroy(&sstream->fd_input);
        sstream->fd = -1; /* autoclosed by fd_input */