From: Stephan Bosch Date: Tue, 3 Sep 2019 19:43:31 +0000 (+0200) Subject: lib: istream-base64-decoder - Fix handling of error, EOF and stream buffer overflow... X-Git-Tag: 2.3.9~207 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d854014831d251815884a1b1ea327470d2e7feaa;p=thirdparty%2Fdovecot%2Fcore.git lib: istream-base64-decoder - Fix handling of error, EOF and stream buffer overflow conditions. --- diff --git a/src/lib/istream-base64-decoder.c b/src/lib/istream-base64-decoder.c index 50a45c8d41..0229ac07f9 100644 --- a/src/lib/istream-base64-decoder.c +++ b/src/lib/istream-base64-decoder.c @@ -27,7 +27,6 @@ static int i_stream_read_parent(struct istream_private *stream) ret = i_stream_read_memarea(stream->parent); if (ret <= 0) { stream->istream.stream_errno = stream->parent->stream_errno; - stream->istream.eof = stream->parent->eof; return ret; } size = i_stream_get_data_size(stream->parent); @@ -92,10 +91,16 @@ static ssize_t i_stream_base64_decoder_read(struct istream_private *stream) do { ret = i_stream_read_parent(stream); - if (ret <= 0) { - if (ret < 0 && stream->istream.stream_errno == 0) + if (ret == 0) + return 0; + if (ret < 0 && ret != -2) { + if (stream->istream.stream_errno != 0) + return -1; + if (i_stream_get_data_size(stream->parent) == 0) { i_stream_base64_finish_decode(bstream); - return ret; + stream->istream.eof = TRUE; + return -1; + } } /* encode as many blocks as fits into destination buffer */