LibGfx/ILBM: Ensure CMAP chunk size matches expected value
The color map should be 3 bytes per pixel and should contain `2^nPlanes` pixels. We now return an error if the color map isn't the size we expect.
This commit is contained in:
parent
61eb754f63
commit
f56ae8c0e9
Notes:
sideshowbarker
2024-07-17 21:26:19 +09:00
Author: https://github.com/tcl3 Commit: https://github.com/SerenityOS/serenity/commit/f56ae8c0e9 Pull-request: https://github.com/SerenityOS/serenity/pull/21699 Reviewed-by: https://github.com/warpdesign
3 changed files with 4 additions and 0 deletions
|
@ -154,6 +154,7 @@ TEST_CASE(test_ilbm_malformed_header)
|
|||
TEST_CASE(test_ilbm_malformed_frame)
|
||||
{
|
||||
Array test_inputs = {
|
||||
TEST_INPUT("ilbm/incorrect-cmap-size.iff"sv),
|
||||
TEST_INPUT("ilbm/incorrect-uncompressed-size.iff"sv),
|
||||
TEST_INPUT("ilbm/missing-body-chunk.iff"sv)
|
||||
};
|
||||
|
|
BIN
Tests/LibGfx/test-inputs/ilbm/incorrect-cmap-size.iff
Normal file
BIN
Tests/LibGfx/test-inputs/ilbm/incorrect-cmap-size.iff
Normal file
Binary file not shown.
|
@ -298,6 +298,9 @@ static ErrorOr<void> decode_iff_chunks(ILBMLoadingContext& context)
|
|||
while (!chunks.is_empty()) {
|
||||
auto chunk = TRY(decode_iff_advance_chunk(chunks));
|
||||
if (chunk.type == FourCC("CMAP")) {
|
||||
if (chunk.data.size() != (1ul << context.bm_header.planes) * 3)
|
||||
return Error::from_string_literal("Invalid CMAP chunk size");
|
||||
|
||||
context.color_table = TRY(decode_cmap_chunk(chunk));
|
||||
} else if (chunk.type == FourCC("BODY")) {
|
||||
if (context.color_table.is_empty())
|
||||
|
|
Loading…
Add table
Reference in a new issue