From: Timo Sirainen Date: Mon, 15 Jun 2020 07:33:53 +0000 (+0300) Subject: lib-storage: istream-mail - Fix assert-crash on handling corrupted mail size X-Git-Tag: 2.3.13~509 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8a31ae84adc012e09c593f35edd3c7be34b67cbb;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: istream-mail - Fix assert-crash on handling corrupted mail size In some situations the "Cached message size smaller than expected" error handling could have resulted in: Panic: file istream.c: line 315 (i_stream_read_memarea): assertion failed: (old_size <= _stream->pos - _stream->skip) --- diff --git a/src/lib-storage/index/istream-mail.c b/src/lib-storage/index/istream-mail.c index 365f8c897e..3cb3571479 100644 --- a/src/lib-storage/index/istream-mail.c +++ b/src/lib-storage/index/istream-mail.c @@ -124,7 +124,8 @@ i_stream_mail_read(struct istream_private *stream) i_stream_mail_set_size_corrupted(mstream, size); /* istream code expects that the position has not changed when read error occurs, so move pos back. */ - stream->pos -= size; + i_assert(stream->pos >= (size_t)ret); + stream->pos -= ret; return -1; } } else if (ret == -1 && stream->istream.eof) {