From fa24fbf1203131558c83f1baf043dc0bf3e600b7 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 3 Jan 2024 20:42:45 -0500 Subject: [PATCH] LibGfx/OpenType: Survive simple glyphs with 0 contours These are valid per spec, and do sometimes occur in practice, e.g. in embedded fonts in 0000550.pdf and 0000246.pdf in 0000.zip in the PDFA test set. --- Userland/Libraries/LibGfx/Font/OpenType/Glyf.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGfx/Font/OpenType/Glyf.cpp b/Userland/Libraries/LibGfx/Font/OpenType/Glyf.cpp index 1ea8794e5d..340929eacb 100644 --- a/Userland/Libraries/LibGfx/Font/OpenType/Glyf.cpp +++ b/Userland/Libraries/LibGfx/Font/OpenType/Glyf.cpp @@ -246,7 +246,9 @@ ReadonlyBytes Glyf::Glyph::program() const void Glyf::Glyph::append_path_impl(Gfx::Path& path, Gfx::AffineTransform const& transform) const { // Get offset for flags, x, and y. - u16 num_points = be_u16(m_slice.offset((m_num_contours - 1) * 2)) + 1; + u16 num_points = 0; + if (m_num_contours > 0) + num_points = be_u16(m_slice.offset((m_num_contours - 1) * 2)) + 1; u16 num_instructions = be_u16(m_slice.offset(m_num_contours * 2)); u32 flags_offset = m_num_contours * 2 + 2 + num_instructions; u32 x_offset = 0;