Browse Source

Merge branch 'error-parse-image-thumbnail' into 'next'

fix(media): return an error when content is failed to be parsed as an image

See merge request famedly/conduit!734
merge-requests/626/merge
Matthias Ahouansou 1 year ago
parent
commit
e20dd1469a
  1. 6
      src/api/client_server/media.rs
  2. 16
      src/service/media/mod.rs

6
src/api/client_server/media.rs

@ -348,9 +348,9 @@ async fn get_content_thumbnail(
) -> Result<get_content_thumbnail::v1::Response, Error> { ) -> Result<get_content_thumbnail::v1::Response, Error> {
let mxc = format!("mxc://{}/{}", server_name, media_id); let mxc = format!("mxc://{}/{}", server_name, media_id);
if let Ok(Some(FileMeta { if let Some(FileMeta {
file, content_type, .. file, content_type, ..
})) = services() }) = services()
.media .media
.get_thumbnail( .get_thumbnail(
mxc.clone(), mxc.clone(),
@ -361,7 +361,7 @@ async fn get_content_thumbnail(
.try_into() .try_into()
.map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Height is invalid."))?, .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Height is invalid."))?,
) )
.await .await?
{ {
Ok(get_content_thumbnail::v1::Response { file, content_type }) Ok(get_content_thumbnail::v1::Response { file, content_type })
} else if server_name != services().globals.server_name() && allow_remote { } else if server_name != services().globals.server_name() && allow_remote {

16
src/service/media/mod.rs

@ -2,7 +2,10 @@ mod data;
use std::io::Cursor; use std::io::Cursor;
pub use data::Data; 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 crate::{services, Result};
use image::imageops::FilterType; use image::imageops::FilterType;
@ -219,12 +222,11 @@ impl Service {
file: thumbnail_bytes.to_vec(), file: thumbnail_bytes.to_vec(),
})) }))
} else { } else {
// Couldn't parse file to generate thumbnail, send original // Couldn't parse file to generate thumbnail, likely not an image
Ok(Some(FileMeta { return Err(crate::Error::BadRequest(
content_disposition, ErrorKind::Unknown,
content_type, "Unable to generate thumbnail for the requested content (likely is not an image)",
file: file.to_vec(), ));
}))
} }
} else { } else {
Ok(None) Ok(None)

Loading…
Cancel
Save