aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Lin <[email protected]>2021-05-25 23:17:22 -0700
committerJeremy Lin <[email protected]>2021-05-25 23:17:22 -0700
commit3f7e4712cd9e62ce85f58e449074b98e5c95a142 (patch)
tree7fb3f18bf3f02caf808657562ddebcd13ab7670e
parentc2ef331df9d2a1a3e50ed8129b07cca0a52e6f41 (diff)
downloadvaultwarden-3f7e4712cd9e62ce85f58e449074b98e5c95a142.tar.gz
vaultwarden-3f7e4712cd9e62ce85f58e449074b98e5c95a142.zip
Fix attachment size limit calculation for v2 uploads
-rw-r--r--src/api/core/ciphers.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/api/core/ciphers.rs b/src/api/core/ciphers.rs
index f2631984..88dfa3fa 100644
--- a/src/api/core/ciphers.rs
+++ b/src/api/core/ciphers.rs
@@ -852,11 +852,18 @@ fn save_attachment(
err_discard!("Cipher is not write accessible", data)
}
+ // In the v2 API, the attachment record has already been created,
+ // so the size limit needs to be adjusted to account for that.
+ let size_adjust = match &attachment {
+ None => 0, // Legacy API
+ Some(a) => a.file_size as i64, // v2 API
+ };
+
let size_limit = if let Some(ref user_uuid) = cipher.user_uuid {
match CONFIG.user_attachment_limit() {
Some(0) => err_discard!("Attachments are disabled", data),
Some(limit_kb) => {
- let left = (limit_kb * 1024) - Attachment::size_by_user(user_uuid, &conn);
+ let left = (limit_kb * 1024) - Attachment::size_by_user(user_uuid, &conn) + size_adjust;
if left <= 0 {
err_discard!("Attachment size limit reached! Delete some files to open space", data)
}
@@ -868,7 +875,7 @@ fn save_attachment(
match CONFIG.org_attachment_limit() {
Some(0) => err_discard!("Attachments are disabled", data),
Some(limit_kb) => {
- let left = (limit_kb * 1024) - Attachment::size_by_org(org_uuid, &conn);
+ let left = (limit_kb * 1024) - Attachment::size_by_org(org_uuid, &conn) + size_adjust;
if left <= 0 {
err_discard!("Attachment size limit reached! Delete some files to open space", data)
}