From 827e7b1cfc99ceb32246d4f51792f28c46e2742e Mon Sep 17 00:00:00 2001 From: Hajime-san <41257923+Hajime-san@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:45:05 +0900 Subject: [PATCH] handling unsupported bit depth --- ext/canvas/lib.rs | 13 +++++++++++++ tests/testdata/image/1x1-red16.png | Bin 0 -> 77 bytes tests/unit/image_bitmap_test.ts | 7 +++++++ 3 files changed, 20 insertions(+) create mode 100644 tests/testdata/image/1x1-red16.png diff --git a/ext/canvas/lib.rs b/ext/canvas/lib.rs index 97adfdbb93..a8bae55531 100644 --- a/ext/canvas/lib.rs +++ b/ext/canvas/lib.rs @@ -8,6 +8,7 @@ use image::imageops::FilterType; use image::AnimationDecoder; use image::GenericImage; use image::GenericImageView; +use image::ImageDecoder; use image::Pixel; use serde::Deserialize; use serde::Serialize; @@ -210,10 +211,16 @@ fn op_image_decode( if decoder.is_apng()? { return Err(type_error("Animation image is not supported.")); } + if decoder.color_type() != image::ColorType::Rgba8 { + return Err(type_error("Supports 8-bit RGBA only.")); + } image::DynamicImage::from_decoder(decoder)? } "image/jpeg" => { let decoder = image::codecs::jpeg::JpegDecoder::new(reader)?; + if decoder.color_type() != image::ColorType::Rgb8 { + return Err(type_error("Supports 8-bit RGB only.")); + } image::DynamicImage::from_decoder(decoder)? } "image/gif" => { @@ -227,10 +234,16 @@ fn op_image_decode( } "image/bmp" => { let decoder = image::codecs::bmp::BmpDecoder::new(reader)?; + if decoder.color_type() != image::ColorType::Rgba8 { + return Err(type_error("Supports 8-bit RGBA only.")); + } image::DynamicImage::from_decoder(decoder)? } "image/x-icon" => { let decoder = image::codecs::ico::IcoDecoder::new(reader)?; + if decoder.color_type() != image::ColorType::Rgba8 { + return Err(type_error("Supports 8-bit RGBA only.")); + } image::DynamicImage::from_decoder(decoder)? } "image/webp" => { diff --git a/tests/testdata/image/1x1-red16.png b/tests/testdata/image/1x1-red16.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9e279c144f696e96059a0d74e20ec92dba030d GIT binary patch literal 77 zcmeAS@N?(olHy`uVBq!ia0vp^j36w)1| createImageBitmap(imageData), TypeError); + } { const imageData = new Blob( [await Deno.readFile(`${prefix}/1x1-red8.jpeg`)],