changeset 20245:57078d325d01

global: Use i_stream_get_max_buffer_size() wherever possible After 7be8ba0c0 it's no longer correct to access stream->max_buffer_size directly. These changes fix using istream-chain with various wrapper streams.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 01 Jun 2016 18:11:29 +0300
parents fd39559c4533
children 4da2242652f3
files src/lib-compression/istream-bzlib.c src/lib-compression/istream-lz4.c src/lib-compression/istream-lzma.c src/lib-compression/istream-zlib.c src/lib-fs/istream-fs-file.c src/lib-mail/istream-attachment-extractor.c src/lib-mail/istream-binary-converter.c src/lib-mail/istream-header-filter.c src/lib-mail/istream-qp-decoder.c src/lib-ssl-iostream/istream-openssl.c src/lib-test/test-common.c src/lib/istream-concat.c src/lib/istream.c
diffstat 13 files changed, 32 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-compression/istream-bzlib.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-compression/istream-bzlib.c	Wed Jun 01 18:11:29 2016 +0300
@@ -86,7 +86,7 @@
 			   have a seek mark. */
 			i_stream_compress(stream);
 		}
-		if (stream->buffer_size < stream->max_buffer_size)
+		if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream))
 			i_stream_grow_buffer(stream, CHUNK_SIZE);
 
 		if (stream->pos == stream->buffer_size) {
--- a/src/lib-compression/istream-lz4.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-compression/istream-lz4.c	Wed Jun 01 18:11:29 2016 +0300
@@ -150,7 +150,7 @@
 	}
 	/* if we already have max_buffer_size amount of data, fail here */
 	i_stream_compress(stream);
-	if (stream->pos >= stream->max_buffer_size)
+	if (stream->pos >= i_stream_get_max_buffer_size(&stream->istream))
 		return -2;
 	/* allocate enough space for the old data and the new
 	   decompressed chunk. we don't know the original compressed size,
--- a/src/lib-compression/istream-lzma.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-compression/istream-lzma.c	Wed Jun 01 18:11:29 2016 +0300
@@ -95,7 +95,7 @@
 			   have a seek mark. */
 			i_stream_compress(stream);
 		}
-		if (stream->buffer_size < stream->max_buffer_size)
+		if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream))
 			i_stream_grow_buffer(stream, CHUNK_SIZE);
 
 		if (stream->pos == stream->buffer_size) {
--- a/src/lib-compression/istream-zlib.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-compression/istream-zlib.c	Wed Jun 01 18:11:29 2016 +0300
@@ -230,7 +230,7 @@
 			   have a seek mark. */
 			i_stream_compress(stream);
 		}
-		if (stream->buffer_size < stream->max_buffer_size)
+		if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream))
 			i_stream_grow_buffer(stream, CHUNK_SIZE);
 
 		if (stream->pos == stream->buffer_size) {
--- a/src/lib-fs/istream-fs-file.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-fs/istream-fs-file.c	Wed Jun 01 18:11:29 2016 +0300
@@ -27,7 +27,7 @@
 
 	if (fstream->istream.parent == NULL) {
 		input = fs_read_stream(fstream->file,
-				       fstream->istream.max_buffer_size);
+			i_stream_get_max_buffer_size(&stream->istream));
 		i_stream_init_parent(stream, input);
 		i_stream_unref(&input);
 	}
--- a/src/lib-mail/istream-attachment-extractor.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-mail/istream-attachment-extractor.c	Wed Jun 01 18:11:29 2016 +0300
@@ -594,7 +594,7 @@
 
 	*retry_r = FALSE;
 
-	if (stream->pos - stream->skip >= stream->max_buffer_size)
+	if (stream->pos - stream->skip >= i_stream_get_max_buffer_size(&stream->istream))
 		return -2;
 
 	if (astream->failed) {
--- a/src/lib-mail/istream-binary-converter.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-mail/istream-binary-converter.c	Wed Jun 01 18:11:29 2016 +0300
@@ -180,7 +180,7 @@
 	struct message_block block;
 	size_t old_size, new_size;
 
-	if (stream->pos - stream->skip >= stream->max_buffer_size)
+	if (stream->pos - stream->skip >= i_stream_get_max_buffer_size(&stream->istream))
 		return -2;
 	old_size = stream->pos - stream->skip;
 
--- a/src/lib-mail/istream-header-filter.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-mail/istream-header-filter.c	Wed Jun 01 18:11:29 2016 +0300
@@ -157,6 +157,7 @@
 {
 	struct message_header_line *hdr;
 	uoff_t highwater_offset;
+	size_t max_buffer_size;
 	ssize_t ret, ret2;
 	int hdr_ret;
 
@@ -186,7 +187,8 @@
 		}
 	}
 
-	if (mstream->hdr_buf->used >= mstream->istream.max_buffer_size)
+	max_buffer_size = i_stream_get_max_buffer_size(&mstream->istream.istream);
+	if (mstream->hdr_buf->used >= max_buffer_size)
 		return -2;
 
 	while ((hdr_ret = message_parse_header_next(mstream->hdr_ctx,
@@ -286,7 +288,7 @@
 				break;
 			}
 		}
-		if (mstream->hdr_buf->used >= mstream->istream.max_buffer_size)
+		if (mstream->hdr_buf->used >= max_buffer_size)
 			break;
 	}
 	if (mstream->hdr_buf->used > 0) {
--- a/src/lib-mail/istream-qp-decoder.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-mail/istream-qp-decoder.c	Wed Jun 01 18:11:29 2016 +0300
@@ -32,10 +32,11 @@
 	struct qp_decoder_istream *bstream =
 		(struct qp_decoder_istream *)stream;
 	const unsigned char *data;
-	size_t size, error_pos;
+	size_t size, error_pos, max_buffer_size;
 	const char *error;
 	int ret;
 
+	max_buffer_size = i_stream_get_max_buffer_size(&stream->istream);
 	for (;;) {
 		/* remove skipped data from buffer */
 		if (stream->skip > 0) {
@@ -48,7 +49,7 @@
 		stream->buffer = bstream->buf->data;
 
 		i_assert(stream->pos <= bstream->buf->used);
-		if (stream->pos >= bstream->istream.max_buffer_size) {
+		if (stream->pos >= max_buffer_size) {
 			/* stream buffer still at maximum */
 			return -2;
 		}
@@ -60,8 +61,7 @@
 
 			/* only return up to max_buffer_size bytes, even when buffer
 			   actually has more, as not to confuse the caller */
-			new_pos = I_MIN
-				(bstream->buf->used, bstream->istream.max_buffer_size);
+			new_pos = I_MIN(bstream->buf->used, max_buffer_size);
 			bytes = new_pos - stream->pos;
 			stream->pos = new_pos;
 
--- a/src/lib-ssl-iostream/istream-openssl.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-ssl-iostream/istream-openssl.c	Wed Jun 01 18:11:29 2016 +0300
@@ -33,6 +33,7 @@
 	struct ssl_istream *sstream = (struct ssl_istream *)stream;
 	struct ssl_iostream *ssl_io = sstream->ssl_io;
 	unsigned char buffer[IO_BLOCK_SIZE];
+	size_t max_buffer_size = i_stream_get_max_buffer_size(&stream->istream);
 	size_t orig_max_buffer_size = stream->max_buffer_size;
 	size_t size;
 	ssize_t ret, total_ret;
@@ -42,9 +43,9 @@
 		return -1;
 	}
 
-	if (stream->pos >= stream->max_buffer_size) {
+	if (stream->pos >= max_buffer_size) {
 		i_stream_compress(stream);
-		if (stream->pos >= stream->max_buffer_size)
+		if (stream->pos >= max_buffer_size)
 			return -2;
 	}
 
@@ -62,9 +63,9 @@
 
 	if (!i_stream_try_alloc(stream, 1, &size))
 		i_unreached();
-	if (stream->pos + size > stream->max_buffer_size) {
-		i_assert(stream->max_buffer_size > stream->pos);
-		size = stream->max_buffer_size - stream->pos;
+	if (stream->pos + size > max_buffer_size) {
+		i_assert(max_buffer_size > stream->pos);
+		size = max_buffer_size - stream->pos;
 	}
 
 	while ((ret = SSL_read(ssl_io->ssl,
--- a/src/lib-test/test-common.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib-test/test-common.c	Wed Jun 01 18:11:29 2016 +0300
@@ -38,8 +38,10 @@
 
 	i_assert(stream->skip <= stream->pos);
 
-	if (stream->pos - stream->skip >= tstream->istream.max_buffer_size)
+	if (stream->pos - stream->skip >= tstream->istream.max_buffer_size) {
+		i_assert(stream->skip != stream->pos);
 		return -2;
+	}
 
 	if (tstream->max_pos < stream->pos) {
 		/* we seeked past the end of file. */
--- a/src/lib/istream-concat.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib/istream-concat.c	Wed Jun 01 18:11:29 2016 +0300
@@ -169,7 +169,7 @@
 		/* we either read something or we're at EOF */
 		last_stream = cstream->input[cstream->cur_idx+1] == NULL;
 		if (ret == -1 && !last_stream) {
-			if (stream->pos - stream->skip >= stream->max_buffer_size)
+			if (stream->pos - stream->skip >= i_stream_get_max_buffer_size(&stream->istream))
 				return -2;
 
 			i_stream_concat_read_next(cstream);
@@ -320,7 +320,7 @@
 	/* if any of the streams isn't blocking or seekable, set ourself also
 	   nonblocking/nonseekable */
 	for (count = 0; input[count] != NULL; count++) {
-		size_t cur_max = input[count]->real_stream->max_buffer_size;
+		size_t cur_max = i_stream_get_max_buffer_size(input[count]);
 
 		if (cur_max > max_buffer_size)
 			max_buffer_size = cur_max;
--- a/src/lib/istream.c	Wed Jun 01 18:09:48 2016 +0300
+++ b/src/lib/istream.c	Wed Jun 01 18:11:29 2016 +0300
@@ -596,9 +596,7 @@
 
 void i_stream_grow_buffer(struct istream_private *stream, size_t bytes)
 {
-	size_t old_size;
-
-	i_assert(stream->max_buffer_size > 0);
+	size_t old_size, max_size;
 
 	old_size = stream->buffer_size;
 
@@ -608,8 +606,10 @@
 	else
 		stream->buffer_size = nearest_power(stream->buffer_size);
 
-	if (stream->buffer_size > stream->max_buffer_size)
-		stream->buffer_size = stream->max_buffer_size;
+	max_size = i_stream_get_max_buffer_size(&stream->istream);
+	i_assert(max_size > 0);
+	if (stream->buffer_size > max_size)
+		stream->buffer_size = max_size;
 
 	if (stream->buffer_size <= old_size)
 		stream->buffer_size = old_size;
@@ -629,7 +629,7 @@
 		if (stream->skip > 0) {
 			/* remove the unused bytes from beginning of buffer */
                         i_stream_compress(stream);
-		} else if (stream->buffer_size < stream->max_buffer_size) {
+		} else if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream)) {
 			/* buffer is full - grow it */
 			i_stream_grow_buffer(stream, I_STREAM_MIN_SIZE);
 		}