From: sergey.kitov Date: Fri, 17 Feb 2023 16:09:59 +0000 (+0200) Subject: lib-storage: Set attachment file size metadata. X-Git-Tag: 2.4.0~2805 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ac9800649b9c0bdf188506f65e686696c41c941;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Set attachment file size metadata. --- diff --git a/src/lib-storage/index/index-attachment.c b/src/lib-storage/index/index-attachment.c index 74160fe22d..ef729ec67d 100644 --- a/src/lib-storage/index/index-attachment.c +++ b/src/lib-storage/index/index-attachment.c @@ -423,6 +423,16 @@ int index_attachment_stream_get(struct fs *fs, const char *attachment_dir, extref->path, path_suffix); file = fs_file_init(fs, path, FS_OPEN_MODE_READONLY | FS_OPEN_FLAG_SEEKABLE); + uoff_t raw_size; + if (extref->base64_blocks_per_line > 0) { + /* extref->size is base64 encoded size, convert into raw size */ + uoff_t nl_count = (extref->size - 1)/(extref->base64_blocks_per_line * 4); + uoff_t nl_bytes = extref->base64_have_crlf ? 2 * nl_count : nl_count; + raw_size = MAX_BASE64_DECODED_SIZE(extref->size - nl_bytes); + } else { + raw_size = extref->size; + } + fs_set_metadata(file, FS_METADATA_FILE_SIZE, t_strdup_printf("%"PRIuUOFF_T, raw_size)); input = i_stream_create_fs_file(&file, IO_BLOCK_SIZE); ret = istream_attachment_connector_add(conn, input,