# HG changeset patch # User Timo Sirainen # Date 1464793889 -10800 # Node ID 57078d325d013eaf2ee0d846461f38989ede4fbd # Parent fd39559c4533d39dd7d5d6496bcfeef7b63d6bc4 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. diff -r fd39559c4533 -r 57078d325d01 src/lib-compression/istream-bzlib.c --- 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) { diff -r fd39559c4533 -r 57078d325d01 src/lib-compression/istream-lz4.c --- 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, diff -r fd39559c4533 -r 57078d325d01 src/lib-compression/istream-lzma.c --- 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) { diff -r fd39559c4533 -r 57078d325d01 src/lib-compression/istream-zlib.c --- 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) { diff -r fd39559c4533 -r 57078d325d01 src/lib-fs/istream-fs-file.c --- 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); } diff -r fd39559c4533 -r 57078d325d01 src/lib-mail/istream-attachment-extractor.c --- 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) { diff -r fd39559c4533 -r 57078d325d01 src/lib-mail/istream-binary-converter.c --- 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; diff -r fd39559c4533 -r 57078d325d01 src/lib-mail/istream-header-filter.c --- 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) { diff -r fd39559c4533 -r 57078d325d01 src/lib-mail/istream-qp-decoder.c --- 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; diff -r fd39559c4533 -r 57078d325d01 src/lib-ssl-iostream/istream-openssl.c --- 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, diff -r fd39559c4533 -r 57078d325d01 src/lib-test/test-common.c --- 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. */ diff -r fd39559c4533 -r 57078d325d01 src/lib/istream-concat.c --- 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; diff -r fd39559c4533 -r 57078d325d01 src/lib/istream.c --- 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); }