From 81905b9300535941e918eb81760c26fc51edb704 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 3 May 2016 16:54:46 +0300 Subject: [PATCH] lib-mail: istream-header-filter - Check errors reading header This probably doesn't affect the results much, since the stream_errno is set anyway. But it's better to abort early, just in case the broken state might end up asserting later. --- src/lib-mail/istream-header-filter.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lib-mail/istream-header-filter.c b/src/lib-mail/istream-header-filter.c index 1afb02641b..d094f27dc1 100644 --- a/src/lib-mail/istream-header-filter.c +++ b/src/lib-mail/istream-header-filter.c @@ -446,12 +446,12 @@ i_stream_header_filter_seek_to_header(struct header_filter_istream *mstream, mstream->seen_eoh = FALSE; } -static void skip_header(struct header_filter_istream *mstream) +static int skip_header(struct header_filter_istream *mstream) { size_t pos; if (mstream->header_read) - return; + return 0; if (mstream->istream.access_counter != mstream->istream.parent->real_stream->access_counter) { @@ -464,6 +464,7 @@ static void skip_header(struct header_filter_istream *mstream) pos = i_stream_get_data_size(&mstream->istream.istream); i_stream_skip(&mstream->istream.istream, pos); } + return mstream->istream.istream.stream_errno != 0 ? -1 : 0; } static void @@ -502,7 +503,8 @@ static void i_stream_header_filter_seek(struct istream_private *stream, /* if we haven't parsed the whole header yet, we don't know if we want to seek inside header or body. so make sure we've parsed the header. */ - skip_header(mstream); + if (skip_header(mstream) < 0) + return; stream_reset_to(mstream, v_offset); if (v_offset < mstream->header_size.virtual_size) { @@ -542,7 +544,8 @@ i_stream_header_filter_stat(struct istream_private *stream, bool exact) /* fix the filtered header size */ old_offset = stream->istream.v_offset; - skip_header(mstream); + if (skip_header(mstream) < 0) + return -1; stream->statbuf.st_size -= (off_t)mstream->header_size.physical_size -