dovecot-2.2: lib: istream-tee wasn't returning data correctly al...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Jul 4 12:35:05 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/dffc6dd2be0d
changeset: 17605:dffc6dd2be0d
user: Timo Sirainen <tss at iki.fi>
date: Fri Jul 04 15:33:12 2014 +0300
description:
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.)
diffstat:
src/lib/istream-tee.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diffs (30 lines):
diff -r 189f97de7ffa -r dffc6dd2be0d src/lib/istream-tee.c
--- 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;
}
More information about the dovecot-cvs
mailing list