From 37c9b449c63422022d3bf2d51faac0cb49252cc2 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 4 Oct 2026 12:18:36 -0400 Subject: [PATCH] Never crash: media crate without expect() The smart-object branch of the layered-file decoder bound the footage layer twice and re-read it with expect("embedded implies a layer"); bind it once with a let-chain. Denies the panic lints in the crate. Co-Authored-By: Claude Opus 5.5 --- clippy.toml | 4 ++++ crates/media/src/layered.rs | 5 +++-- crates/media/src/lib.rs | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 clippy.toml diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 00000000..4b6c79f5 --- /dev/null +++ b/clippy.toml @@ -0,0 +1,4 @@ +allow-unwrap-in-tests = true +allow-expect-in-tests = true +allow-panic-in-tests = true +allow-indexing-slicing-in-tests = true diff --git a/crates/media/src/layered.rs b/crates/media/src/layered.rs index 02546611..e65aa793 100644 --- a/crates/media/src/layered.rs +++ b/crates/media/src/layered.rs @@ -73,7 +73,9 @@ pub(crate) fn decode(path: &str, bytes: &[u8], footage: &Footage, op: AlphaOp) - if effectcraft_psd::is_psd(bytes) { let psd = effectcraft_psd::Psd::parse(bytes.to_vec()).map_err(|e| MediaError::Decode(format!("{path}: {e}")))?; // A smart object's embedded file: an embedded document's merged image, or an image. - if let Some(uuid) = footage.layer.as_ref().and_then(|l| l.embedded.as_deref()) { + if let Some(l) = footage.layer.as_ref() + && let Some(uuid) = l.embedded.as_deref() + { let data = psd.linked_data(uuid).ok_or_else(|| MediaError::Decode(format!("{path}: no embedded file {uuid}")))?; let px = if effectcraft_psd::is_psd(data) { let inner = effectcraft_psd::Psd::parse(data.to_vec()).map_err(|e| MediaError::Decode(format!("{path} (smart object): {e}")))?; @@ -84,7 +86,6 @@ pub(crate) fn decode(path: &str, bytes: &[u8], footage: &Footage, op: AlphaOp) - effectcraft_psd::Pixels { width: rgba.width(), height: rgba.height(), data: rgba.pixels().map(|p| p.0).collect() } }; // A perspective quad or a warp: baked as placed. - let l = footage.layer.as_ref().expect("embedded implies a layer"); if l.placed && let Some(so) = psd.layers.get(l.index as usize).and_then(|pl| pl.smart_object.as_ref()) { diff --git a/crates/media/src/lib.rs b/crates/media/src/lib.rs index 5de2eb8c..a1c8e056 100644 --- a/crates/media/src/lib.rs +++ b/crates/media/src/lib.rs @@ -13,6 +13,8 @@ //! (PNG, JPEG, GIF, WebP, TIFF, BMP, OpenEXR); Photoshop documents (merged image or one layer) come //! from `effectcraft-psd` and SVG from `effectcraft-svg` (rasterised at any scale). +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] + mod convert; pub mod exr_channels; mod layered;