From 1fb9c3b6463fdee9eb4dac697beab4d3d7a5fdcf Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 8 Oct 2019 13:50:16 +0330 Subject: [PATCH] [glyf] Implement depth limit for add_gid_and_children --- src/hb-ot-glyf-table.hh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh index 124a7d7b0..0bb9aca13 100644 --- a/src/hb-ot-glyf-table.hh +++ b/src/hb-ot-glyf-table.hh @@ -795,7 +795,7 @@ struct glyf bool get_points_var (hb_codepoint_t glyph, const int *coords, unsigned int coord_count, contour_point_vector_t &all_points /* OUT */, - unsigned int depth=0) const + unsigned int depth = 0) const { if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return false; contour_point_vector_t points; @@ -1009,8 +1009,10 @@ struct glyf } void - add_gid_and_children (hb_codepoint_t gid, hb_set_t *gids_to_retain) const + add_gid_and_children (hb_codepoint_t gid, hb_set_t *gids_to_retain, + unsigned int depth = 0) const { + if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return; /* Check if is already visited */ if (gids_to_retain->has (gid)) return; @@ -1019,7 +1021,7 @@ struct glyf hb_bytes_t glyph_bytes = bytes_for_glyph (gid); const GlyphHeader &glyph_header = *glyph_bytes.as (); for (auto &item : glyph_header.get_composite_iterator (glyph_bytes)) - add_gid_and_children (item.glyphIndex, gids_to_retain); + add_gid_and_children (item.glyphIndex, gids_to_retain, depth); } private: