summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2018-11-16 01:48:26 -0500
committerBehdad Esfahbod <behdad@behdad.org>2018-11-16 01:48:26 -0500
commit9e9f16c92debecb4caf533fa112898dfec116d98 (patch)
treee0912d6267c7c0327b226a3ced828a5b16d8fb66
parent11aa0468ac2c62ff734ba6b0f6eb43d1bd6f602b (diff)
[subset] Remove invalid glyphs from glypset to retain
Fixes https://github.com/harfbuzz/harfbuzz/pull/1388
-rw-r--r--src/hb-subset-plan.cc13
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))