From 661b2d394d600a7dc334691a05dce7a49699254f Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 1 Jun 2023 09:09:24 -0400 Subject: [PATCH] WebP/Lossy: Clamp negative quantization indices to zero The spec doesn't talk about this happening in the text, but `dequant_init()` in 20.4 stores `q` in an int and clamps that to 0 later. --- Tests/LibGfx/TestImageDecoder.cpp | 21 ++++++++++++++++++ Tests/LibGfx/test-inputs/smolkling.webp | Bin 0 -> 27938 bytes .../LibGfx/ImageFormats/WebPLoaderLossy.cpp | 6 ++--- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 Tests/LibGfx/test-inputs/smolkling.webp diff --git a/Tests/LibGfx/TestImageDecoder.cpp b/Tests/LibGfx/TestImageDecoder.cpp index ddbae4fd68..1ccca42af0 100644 --- a/Tests/LibGfx/TestImageDecoder.cpp +++ b/Tests/LibGfx/TestImageDecoder.cpp @@ -404,6 +404,27 @@ TEST_CASE(test_webp_extended_lossy_uncompressed_alpha) EXPECT_EQ(frame.image->get_pixel(355, 106), Gfx::Color(0, 0, 0, 0)); } +TEST_CASE(test_webp_extended_lossy_negative_quantization_offset) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("smolkling.webp"sv))); + EXPECT(Gfx::WebPImageDecoderPlugin::sniff(file->bytes())); + auto plugin_decoder = MUST(Gfx::WebPImageDecoderPlugin::create(file->bytes())); + MUST(plugin_decoder->initialize()); + + EXPECT_EQ(plugin_decoder->frame_count(), 1u); + EXPECT(!plugin_decoder->is_animated()); + EXPECT(!plugin_decoder->loop_count()); + + EXPECT_EQ(plugin_decoder->size(), Gfx::IntSize(264, 264)); + + auto frame = MUST(plugin_decoder->frame(0)); + EXPECT_EQ(frame.image->size(), Gfx::IntSize(264, 264)); + + // While VP8 YUV contents are defined bit-exact, the YUV->RGB conversion isn't. + // So pixels changing by 1 or so below is fine if you change code. + EXPECT_EQ(frame.image->get_pixel(16, 16), Gfx::Color(0x3c, 0x24, 0x1a, 255)); +} + TEST_CASE(test_webp_lossy_4) { // This is https://commons.wikimedia.org/wiki/File:Fr%C3%BChling_bl%C3%BChender_Kirschenbaum.jpg, diff --git a/Tests/LibGfx/test-inputs/smolkling.webp b/Tests/LibGfx/test-inputs/smolkling.webp new file mode 100644 index 0000000000000000000000000000000000000000..5db2eb1fd79f606cc14b4e4cd4f90803b33ed37c GIT binary patch literal 27938 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 O$ic|Kz>LHOnGXO6@=w