LibGfx: Support AVIF images with missing pixi property

This commit is contained in:
Psychpsyo 2024-11-10 17:39:40 +01:00 committed by Tim Ledbetter
parent 3fffd1129c
commit b22341fc77
Notes: github-actions[bot] 2024-11-23 03:58:54 +00:00
3 changed files with 11 additions and 0 deletions

View file

@ -68,6 +68,11 @@ static ErrorOr<void> decode_avif_header(AVIFLoadingContext& context)
if (context.decoder == nullptr) {
return Error::from_string_literal("failed to allocate AVIF decoder");
}
// This makes the decoder not error if an item in the file is missing the mandatory pixi property.
// Reason for this is that older versions of ImageMagick do not set this property, which leads to
// broken web content if the error is not ignored.
context.decoder->strictFlags &= ~AVIF_STRICT_PIXI_REQUIRED;
}
avifResult result = avifDecoderSetIOMemory(context.decoder, context.data.data(), context.data.size());

View file

@ -1067,3 +1067,9 @@ TEST_CASE(test_avif_frame_out_of_bounds)
auto frame1 = TRY_OR_FAIL(plugin_decoder->frame(0));
EXPECT(plugin_decoder->frame(1).is_error());
}
TEST_CASE(test_avif_missing_pixi_property)
{
auto file = TRY_OR_FAIL(Core::MappedFile::map(TEST_INPUT("avif/missing-pixi-property.avif"sv)));
EXPECT(Gfx::AVIFImageDecoderPlugin::sniff(file->bytes()));
}