diff --git a/crates/core/files/src/lib.rs b/crates/core/files/src/lib.rs index eb4123640..d4e2b2ab7 100644 --- a/crates/core/files/src/lib.rs +++ b/crates/core/files/src/lib.rs @@ -124,13 +124,24 @@ pub fn image_size(f: &NamedTempFile) -> Option<(usize, usize)> { } /// Determine size of image with buffer -pub fn image_size_vec(v: &[u8]) -> Option<(usize, usize)> { - if let Ok(size) = imagesize::blob_size(v) - .inspect_err(|err| tracing::error!("Failed to generate image size! {err:?}")) - { - Some((size.width, size.height)) - } else { - None +pub fn image_size_vec(v: &[u8], mime: &str) -> Option<(usize, usize)> { + match mime { + "image/svg+xml" => { + let tree = + report_internal_error!(usvg::Tree::from_data(v, &Default::default())).ok()?; + + let size = tree.size(); + Some((size.width() as usize, size.height() as usize)) + } + _ => { + if let Ok(size) = imagesize::blob_size(v) + .inspect_err(|err| tracing::error!("Failed to generate image size! {err:?}")) + { + Some((size.width, size.height)) + } else { + None + } + } } } diff --git a/crates/services/january/src/requests.rs b/crates/services/january/src/requests.rs index a17b494eb..c4706d861 100644 --- a/crates/services/january/src/requests.rs +++ b/crates/services/january/src/requests.rs @@ -122,20 +122,21 @@ impl Request { _ => Ok(None), } } else { - let response = if let Some(Request { response, .. }) = request { - response + let request = if let Some(request) = request { + request } else { - let Request { response, mime } = Request::new(url).await?; - if matches!(mime.type_(), mime::IMAGE) { - response + let request = Request::new(url).await?; + if matches!(request.mime.type_(), mime::IMAGE) { + request } else { return Err(create_error!(FileTypeNotAllowed)); } }; - if let Some((width, height)) = - image_size_vec(&report_internal_error!(response.bytes().await)?) - { + if let Some((width, height)) = image_size_vec( + &report_internal_error!(request.response.bytes().await)?, + request.mime.as_ref(), + ) { Ok(Some(Image { url: url.to_owned(), width,