]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Set attachment file size metadata.
authorsergey.kitov <sergey.kitov@open-xchange.com>
Fri, 17 Feb 2023 16:09:59 +0000 (18:09 +0200)
committersergey.kitov <sergey.kitov@open-xchange.com>
Fri, 14 Apr 2023 14:03:58 +0000 (17:03 +0300)
src/lib-storage/index/index-attachment.c

index 74160fe22df539c9b1b9175754f730d9f62d5e77..ef729ec67d5baa9c6c54cbbc43acaad7fb466462 100644 (file)
@@ -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,