# HG changeset patch # User Timo Sirainen # Date 1297299082 -7200 # Node ID 079a81fb5117f93a293014dd297470fefebb43f1 # Parent 4374ae187075b2823e2010216584abe4b500309c istream-header-filter: Fixes handling HEADER_FILTER_END_BODY_WITH_LF correctly. diff -r 4374ae187075 -r 079a81fb5117 src/lib-mail/istream-header-filter.c --- a/src/lib-mail/istream-header-filter.c Thu Feb 10 02:21:03 2011 +0200 +++ b/src/lib-mail/istream-header-filter.c Thu Feb 10 02:51:22 2011 +0200 @@ -318,7 +318,9 @@ if (ret == -1 && stream->parent->eof && !last_lf) { /* missing LF, need to add it */ + i_assert(!mstream->last_lf_added); i_assert(size == 0 || data[size-1] != '\n'); + buffer_reset(mstream->hdr_buf); buffer_append(mstream->hdr_buf, data, size); if (mstream->crlf) @@ -328,7 +330,7 @@ mstream->last_lf_added = TRUE; stream->skip = 0; - stream->pos = size + 1; + stream->pos = mstream->hdr_buf->used; stream->buffer = mstream->hdr_buf->data; return mstream->crlf ? 2 : 1; } else { @@ -425,8 +427,6 @@ struct header_filter_istream *mstream = (struct header_filter_istream *)stream; - mstream->last_lf_added = FALSE; - if (stream->istream.v_offset == v_offset) { /* just reset the input buffer */ stream_reset_to(mstream, v_offset); @@ -434,6 +434,9 @@ mstream->istream.parent_expected_offset); return; } + /* if last_lf_added=TRUE, we're currently at EOF. So reset it only if + we're seeking backwards, otherwise we would just add a duplicate */ + mstream->last_lf_added = FALSE; if (v_offset == 0) { /* seeking to beginning of headers. */