1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 06:27:45 +00:00

LibGfx/OpenType: Add validation for OpenType head table values

Previously, a crash would occur if a font file had an invalid
IndexToLocFormat value.
This commit is contained in:
Tim Ledbetter 2023-11-10 23:02:11 +00:00 committed by Andreas Kling
parent 87a4a5b302
commit 1eae02a018

View file

@ -32,6 +32,17 @@ ErrorOr<Head> Head::from_slice(ReadonlyBytes slice)
return Error::from_string_literal("Could not load Head: Not enough data"); return Error::from_string_literal("Could not load Head: Not enough data");
auto const& font_header_table = *bit_cast<FontHeaderTable const*>(slice.data()); auto const& font_header_table = *bit_cast<FontHeaderTable const*>(slice.data());
static constexpr u32 HEADER_TABLE_MAGIC_NUMBER = 0x5F0F3CF5;
if (font_header_table.major_version != 1)
return Error::from_string_literal("Unknown major version. Expected 1");
if (font_header_table.minor_version != 0)
return Error::from_string_literal("Unknown minor version. Expected 0");
if (font_header_table.magic_number != HEADER_TABLE_MAGIC_NUMBER)
return Error::from_string_literal("Invalid magic number");
if (font_header_table.index_to_loc_format != 0 && font_header_table.index_to_loc_format != 1)
return Error::from_string_literal("Invalid IndexToLocFormat value");
return Head(font_header_table); return Head(font_header_table);
} }