Mercurial > dovecot > core-2.2
changeset 17605:dffc6dd2be0d
lib: istream-tee wasn't returning data correctly always.
This fixes an assert-crash in istream-tee.c. (Hopefully it was always
assert-crashing instead of returning corrupted data.)
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 04 Jul 2014 15:33:12 +0300 |
parents | 189f97de7ffa |
children | f1d29866e147 |
files | src/lib/istream-tee.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/istream-tee.c Fri Jul 04 14:48:44 2014 +0300 +++ b/src/lib/istream-tee.c Fri Jul 04 15:33:12 2014 +0300 @@ -35,6 +35,7 @@ old_used = tstream->istream.pos - tstream->istream.skip; tstream->istream.buffer = data; + i_assert(tstream->istream.istream.v_offset >= tee->input->v_offset); tstream->istream.skip = tstream->istream.istream.v_offset - tee->input->v_offset; i_assert(tstream->istream.skip + old_used <= size); @@ -155,14 +156,17 @@ } else { /* there's still some data available from parent */ i_assert(last_high_offset < input->v_offset + size); + tee_streams_update_buffer(tstream->tee); i_assert(stream->pos < size); - stream->buffer = data; } i_assert(stream->buffer == data); ret = size - stream->pos; i_assert(ret > 0); stream->pos = size; + + i_assert(stream->istream.v_offset + (stream->pos - stream->skip) == + input->v_offset + size); return ret; }