From 2452cf6b55965b5c4dd8d9bbbdc6145aa7972ab4 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 1 Jun 2023 09:13:10 -0400 Subject: [PATCH] WebP/Lossy: Allow negative values from segment adjustment too The spec doesn't talk about this happening in the text, but `dequant_init()` in 20.4 processes segment adjustment and quantization index adjustment in the same variable `q` before clamping. Since we had to adjust the latter step in the previous commit, do it for the former step too. I haven't seen this happen in the wild yet (and now, I hopefully never will notice it if it happens). --- Userland/Libraries/LibGfx/ImageFormats/WebPLoaderLossy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/WebPLoaderLossy.cpp b/Userland/Libraries/LibGfx/ImageFormats/WebPLoaderLossy.cpp index fe4c0a726f..ec05396cb3 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/WebPLoaderLossy.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/WebPLoaderLossy.cpp @@ -613,7 +613,7 @@ i16 dequantize_value(i16 value, bool is_dc, QuantizationIndices const& quantizat // * For uv, the dc_qlookup index is clamped to 117 (instead of 127 for everything else) // (or, alternatively, the value is clamped to 132 at most) - u8 y_ac_base = quantization_indices.y_ac; + int y_ac_base = quantization_indices.y_ac; if (segmentation.update_macroblock_segmentation_map) { if (segmentation.segment_feature_mode == SegmentFeatureMode::DeltaValueMode) y_ac_base += segmentation.quantizer_update_value[segment_id];