From: Timo Sirainen Date: Tue, 9 Apr 2024 11:49:59 +0000 (+0300) Subject: fs-metawrap, fs-compress, fs-crypt: fs_read_stream() - return parent stream error... X-Git-Tag: 2.4.0~1698 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d5b10334c6cebdd015ff05ae3147a4bb284b4527;p=thirdparty%2Fdovecot%2Fcore.git fs-metawrap, fs-compress, fs-crypt: fs_read_stream() - return parent stream error immediately Earlier behavior was to delay until i_stream_read() was called, which caused problems with some error handling. --- diff --git a/src/lib-fs/fs-metawrap.c b/src/lib-fs/fs-metawrap.c index 04241c969f..1df736a088 100644 --- a/src/lib-fs/fs-metawrap.c +++ b/src/lib-fs/fs-metawrap.c @@ -259,6 +259,11 @@ fs_metawrap_read_stream(struct fs_file *_file, size_t max_buffer_size) } input = fs_read_stream(file->super_read, max_buffer_size); + if (input->stream_errno != 0) { + file->input = input; + i_stream_ref(file->input); + return file->input; + } file->input = i_stream_create_metawrap(input, fs_metawrap_callback, file); i_stream_unref(&input); i_stream_ref(file->input); diff --git a/src/plugins/fs-compress/fs-compress.c b/src/plugins/fs-compress/fs-compress.c index 83afc87e51..f8a46a9653 100644 --- a/src/plugins/fs-compress/fs-compress.c +++ b/src/plugins/fs-compress/fs-compress.c @@ -177,6 +177,11 @@ fs_compress_read_stream(struct fs_file *_file, size_t max_buffer_size) input = fs_read_stream(file->super_read, I_MAX(FS_COMPRESS_ISTREAM_MIN_BUFFER_SIZE, max_buffer_size)); + if (input->stream_errno != 0) { + file->input = input; + i_stream_ref(file->input); + return file->input; + } if (file->fs->try_plain) flags |= ISTREAM_DECOMPRESS_FLAG_TRY; file->input = i_stream_create_decompress(input, flags); diff --git a/src/plugins/mail-crypt/fs-crypt-common.c b/src/plugins/mail-crypt/fs-crypt-common.c index efff44921f..3246b15ff7 100644 --- a/src/plugins/mail-crypt/fs-crypt-common.c +++ b/src/plugins/mail-crypt/fs-crypt-common.c @@ -281,6 +281,11 @@ fs_crypt_read_stream(struct fs_file *_file, size_t max_buffer_size) input = fs_read_stream(file->super_read, I_MAX(FS_CRYPT_ISTREAM_MIN_BUFFER_SIZE, max_buffer_size)); + if (input->stream_errno != 0) { + file->input = input; + i_stream_ref(file->input); + return file->input; + } if (file->fs->allow_missing_keys) { struct istream *decrypted_input =