diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2018-11-16 01:48:26 -0500 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2018-11-16 01:48:26 -0500 |
commit | 9e9f16c92debecb4caf533fa112898dfec116d98 (patch) | |
tree | e0912d6267c7c0327b226a3ced828a5b16d8fb66 | |
parent | 11aa0468ac2c62ff734ba6b0f6eb43d1bd6f602b (diff) |
[subset] Remove invalid glyphs from glypset to retain
Fixes https://github.com/harfbuzz/harfbuzz/pull/1388
-rw-r--r-- | src/hb-subset-plan.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 6b526222..56a2bba5 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -67,6 +67,17 @@ _gsub_closure (hb_face_t *face, hb_set_t *gids_to_retain) gids_to_retain); } +static void +_remove_invalid_gids (hb_set_t *glyphs, + unsigned int num_glyphs) +{ + hb_codepoint_t gid = HB_SET_VALUE_INVALID; + while (glyphs->next (&gid)) + { + if (gid >= num_glyphs) + glyphs->del (gid); + } +} static hb_set_t * _populate_gids_to_retain (hb_face_t *face, @@ -112,6 +123,8 @@ _populate_gids_to_retain (hb_face_t *face, } hb_set_destroy (initial_gids_to_retain); + _remove_invalid_gids (all_gids_to_retain, face->get_num_glyphs ()); + glyphs->alloc (all_gids_to_retain->get_population ()); gid = HB_SET_VALUE_INVALID; while (all_gids_to_retain->next (&gid)) |