LibGfx: Make PNGLoader not assert on images with missing chunks

Before this, images without IHDR, or palettized images with no or
too small PLTE would lead to asserts. Found by running FuzzPNGLoader
locally.
This commit is contained in:
Nico Weber 2020-11-29 14:34:54 -05:00 committed by Andreas Kling
parent 7db765bb73
commit fe999d6281
Notes: sideshowbarker 2024-07-19 01:10:45 +09:00

View file

@ -747,8 +747,11 @@ static bool decode_png_bitmap(PNGLoadingContext& context)
if (context.state >= PNGLoadingContext::State::BitmapDecoded)
return true;
ASSERT(context.width >= 0);
ASSERT(context.height >= 0);
if (context.width == -1 || context.height == -1)
return false; // Didn't see an IHDR chunk.
if (context.color_type == 3 && context.palette_data.size() < (1u << context.bit_depth))
return false; // Didn't see an PLTE chunk for a palettized image, or not enough entries.
unsigned long srclen = context.compressed_data.size() - 6;
unsigned long destlen = 0;