From 3735f2cbedfda7828bdc6e2c426c084845b23a26 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sat, 20 Apr 2024 09:58:22 -0400 Subject: [PATCH] LibGfx/JPEG2000: Read COD on tile headers too I haven't seen this in the wild yet, but it is allowed per spec and easy to do. --- Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp b/Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp index 4da0d1b91db..d8462161c9a 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp @@ -459,6 +459,7 @@ struct TilePartData { }; struct TileData { + Optional cod; Optional qcd; Vector qccs; Vector tile_parts; @@ -652,7 +653,11 @@ static ErrorOr parse_codestream_tile_header(JPEG2000LoadingContext& contex case J2K_PLT: case J2K_COM: { auto marker = TRY(read_marker_at_cursor(context)); - if (marker.marker == J2K_QCD) { + if (marker.marker == J2K_COD) { + if (tile.cod.has_value()) + return Error::from_string_literal("JPEG2000ImageDecoderPlugin: Multiple COD markers in tile header"); + tile.cod = TRY(read_coding_style_default(marker.data.value())); + } else if (marker.marker == J2K_QCD) { if (tile.qcd.has_value()) return Error::from_string_literal("JPEG2000ImageDecoderPlugin: Multiple QCD markers in tile header"); tile.qcd = TRY(read_quantization_default(marker.data.value()));