mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 06:27:35 +00:00
LiGfx/ILBMLoader: Don't throw if malformed bitplane can be decoded
Some apps seem to generate malformed images that are accepted by most readers. We now only throw if malformed data would lead to a write outside the chunky buffer.
This commit is contained in:
parent
7e3249ad4c
commit
fc5b6e4dda
3 changed files with 18 additions and 1 deletions
|
@ -211,13 +211,19 @@ static ErrorOr<ByteBuffer> planar_to_chunky(ReadonlyBytes bitplanes, ILBMLoading
|
|||
for (u8 p = 0; p < planes; p++) {
|
||||
u8 const plane_mask = 1 << (p % 8);
|
||||
size_t offset_base = (pitch * planes * y) + (p * pitch);
|
||||
if (offset_base + pitch > bitplanes.size() || scanline + ((pitch - 1) * 8) + 7 >= chunky.size())
|
||||
if (offset_base + pitch > bitplanes.size())
|
||||
return Error::from_string_literal("Malformed bitplane data");
|
||||
|
||||
for (u16 i = 0; i < pitch; i++) {
|
||||
u8 bit = bitplanes[offset_base + i];
|
||||
u8 rgb_shift = p / 8;
|
||||
|
||||
// Only throw an error if we would actually attempt to write
|
||||
// outside of the chunky buffer. Some apps like PPaint produce
|
||||
// malformed bitplane data but files are still accepted by most readers.
|
||||
if (bit && scanline + ((pitch - 1) * 8) + 7 >= chunky.size())
|
||||
return Error::from_string_literal("Malformed bitplane data");
|
||||
|
||||
for (u8 b = 0; b < 8; b++) {
|
||||
u8 mask = 1 << (7 - b);
|
||||
// get current plane
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue