Mercurial > dovecot > core-2.2
changeset 20232:2ae2e3beaa56
fs-metawrap: Fixed buffer size while reading metadata header.
It's not enough to have the buffer size set to "large enough" at the time of
the stream creation, because i_stream_set_max_buffer_size() could be called
afterwards.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 31 May 2016 22:33:32 +0300 |
parents | f0b26fed18b6 |
children | 4309b9bad6d9 |
files | src/lib-fs/fs-metawrap.c src/lib-fs/istream-metawrap.c |
diffstat | 2 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-fs/fs-metawrap.c Tue May 31 22:19:37 2016 +0300 +++ b/src/lib-fs/fs-metawrap.c Tue May 31 22:33:32 2016 +0300 @@ -13,8 +13,6 @@ #include "iostream-temp.h" #include "fs-api-private.h" -#define MAX_METADATA_LINE_LEN 8192 - struct metawrap_fs { struct fs fs; bool wrap_metadata; @@ -283,8 +281,7 @@ return file->input; } - input = fs_read_stream(file->super_read, - I_MAX(max_buffer_size, MAX_METADATA_LINE_LEN)); + input = fs_read_stream(file->super_read, max_buffer_size); file->input = i_stream_create_metawrap(input, fs_metawrap_callback, file); i_stream_unref(&input); i_stream_ref(file->input);
--- a/src/lib-fs/istream-metawrap.c Tue May 31 22:19:37 2016 +0300 +++ b/src/lib-fs/istream-metawrap.c Tue May 31 22:33:32 2016 +0300 @@ -4,6 +4,8 @@ #include "istream-private.h" #include "istream-metawrap.h" +#define METAWRAP_MAX_METADATA_LINE_LEN 8192 + struct metawrap_istream { struct istream_private istream; metawrap_callback_t *callback; @@ -60,7 +62,12 @@ stream->istream.v_offset); if (mstream->in_metadata) { + size_t prev_max_size = i_stream_get_max_buffer_size(stream->parent); + + i_stream_set_max_buffer_size(stream->parent, METAWRAP_MAX_METADATA_LINE_LEN); ret = metadata_header_read(mstream); + i_stream_set_max_buffer_size(stream->parent, prev_max_size); + i_assert(stream->istream.v_offset == 0); mstream->start_offset = stream->parent->v_offset; if (ret <= 0)