From: Timo Sirainen Date: Mon, 3 Jun 2024 20:05:22 +0000 (+0300) Subject: lib: istream-seekable - Fix moving stream to memory on write() failure X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53c7113720fbf4768f6413fdfbb2e55bc778716d;p=thirdparty%2Fdovecot%2Fcore.git lib: istream-seekable - Fix moving stream to memory on write() failure Fixes: Panic: file istream-seekable.c: line 238 (read_from_buffer): assertion failed: (*ret_r > 0) --- diff --git a/src/lib/istream-seekable.c b/src/lib/istream-seekable.c index 76c0c2f469..9c7d294052 100644 --- a/src/lib/istream-seekable.c +++ b/src/lib/istream-seekable.c @@ -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 */