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