From 0d2e91b4ea1b7f3fcd1198056ea8f837246f53bf Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 21 Mar 2024 10:30:27 -0400 Subject: [PATCH] LibGfx/JBIG2: Reject things in refinement decoding These aren't hit for my 1000 page PDF test set. --- .../LibGfx/ImageFormats/JBIG2Loader.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JBIG2Loader.cpp b/Userland/Libraries/LibGfx/ImageFormats/JBIG2Loader.cpp index cba7cb9c9f3..f40d26a1bcd 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JBIG2Loader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JBIG2Loader.cpp @@ -964,8 +964,23 @@ struct GenericRefinementRegionDecodingInputParameters { }; // 6.3 Generic Refinement Region Decoding Procedure -static ErrorOr> generic_refinement_region_decoding_procedure(GenericRefinementRegionDecodingInputParameters&) +static ErrorOr> generic_refinement_region_decoding_procedure(GenericRefinementRegionDecodingInputParameters& inputs) { + VERIFY(inputs.gr_template == 0 || inputs.gr_template == 1); + + if (inputs.is_typical_prediction_used) + return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot decode typical prediction in generic refinement regions yet"); + + if (inputs.gr_template == 0) { + if (inputs.adaptive_template_pixels[0].x != -1 || inputs.adaptive_template_pixels[0].y != -1 + || inputs.adaptive_template_pixels[1].x != -1 || inputs.adaptive_template_pixels[1].y != -1) + return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot handle custom adaptive pixels in refinement regions yet"); + } + // GRTEMPLATE 1 never uses adaptive pixels. + + if (inputs.gr_template == 1) + return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot decode GRTEMPLATE 1 yet"); + return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot decode generic refinement regions yet"); }