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) {
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
/* 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) {
/* 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 -