From 30855cef81f5dd5cee200d90be80d3a90a8f53c5 Mon Sep 17 00:00:00 2001 From: Matthias Ahouansou Date: Tue, 4 Feb 2025 14:36:07 +0000 Subject: [PATCH] fix(media): return an error when content is failed to be parsed as an image --- src/api/client_server/media.rs | 6 +++--- src/service/media/mod.rs | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs index 03e4cbab..b38ff6ff 100644 --- a/src/api/client_server/media.rs +++ b/src/api/client_server/media.rs @@ -348,9 +348,9 @@ async fn get_content_thumbnail( ) -> Result { let mxc = format!("mxc://{}/{}", server_name, media_id); - if let Ok(Some(FileMeta { + if let Some(FileMeta { file, content_type, .. - })) = services() + }) = services() .media .get_thumbnail( mxc.clone(), @@ -361,7 +361,7 @@ async fn get_content_thumbnail( .try_into() .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Height is invalid."))?, ) - .await + .await? { Ok(get_content_thumbnail::v1::Response { file, content_type }) } else if server_name != services().globals.server_name() && allow_remote { diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs index a7ac9d50..fed7c6b9 100644 --- a/src/service/media/mod.rs +++ b/src/service/media/mod.rs @@ -2,7 +2,10 @@ mod data; use std::io::Cursor; pub use data::Data; -use ruma::http_headers::{ContentDisposition, ContentDispositionType}; +use ruma::{ + api::client::error::ErrorKind, + http_headers::{ContentDisposition, ContentDispositionType}, +}; use crate::{services, Result}; use image::imageops::FilterType; @@ -219,12 +222,11 @@ impl Service { file: thumbnail_bytes.to_vec(), })) } else { - // Couldn't parse file to generate thumbnail, send original - Ok(Some(FileMeta { - content_disposition, - content_type, - file: file.to_vec(), - })) + // Couldn't parse file to generate thumbnail, likely not an image + return Err(crate::Error::BadRequest( + ErrorKind::Unknown, + "Unable to generate thumbnail for the requested content (likely is not an image)", + )); } } else { Ok(None)