Mercurial > dovecot > core-2.2
changeset 19463:183576574417
sdbox: Fixed assert-crash when message with external attachments was copied between storages.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 06 Dec 2015 14:27:46 +0200 |
parents | 93b0474fe9d6 |
children | 81450c4bfe96 |
files | src/lib-storage/index/dbox-single/sdbox-copy.c |
diffstat | 1 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox-single/sdbox-copy.c Fri Dec 04 14:17:45 2015 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-copy.c Sun Dec 06 14:27:46 2015 +0200 @@ -28,8 +28,12 @@ } if (dest_storage->attachment_dir == NULL || strcmp(src_storage->attachment_dir, - dest_storage->attachment_dir) != 0) { - /* different attachment dirs between storages. + dest_storage->attachment_dir) != 0 || + strcmp(src_storage->storage.set->mail_attachment_fs, + dest_storage->storage.set->mail_attachment_fs) != 0 || + strcmp(src_storage->storage.set->mail_attachment_hash, + dest_storage->storage.set->mail_attachment_hash) != 0) { + /* different attachment dirs/settings between storages. have to copy the slow way. */ return 0; } @@ -62,7 +66,11 @@ guid_generate(), NULL); dest = t_strdup_printf("%s/%s", dest_storage->attachment_dir, dest_relpath); - src_fsfile = fs_file_init(src_storage->attachment_fs, src, + /* we verified above that attachment_fs is compatible for + src and dest, so it doesn't matter which storage's + attachment_fs we use. in any case we need to use the same + one or fs_copy() will crash with assert. */ + src_fsfile = fs_file_init(dest_storage->attachment_fs, src, FS_OPEN_MODE_READONLY); dest_fsfile = fs_file_init(dest_storage->attachment_fs, dest, FS_OPEN_MODE_READONLY);