[subset] For retain gids don't truncate glyphs past the highest requested subset glyph.
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index cc298b4..5702d01 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -156,7 +156,8 @@
 }
 
 static void
-_create_old_gid_to_new_gid_map (bool                               retain_gids,
+_create_old_gid_to_new_gid_map (const hb_face_t                   *face,
+                                bool                               retain_gids,
 				const hb_vector_t<hb_codepoint_t> &glyphs,
                                 hb_map_t                          *glyph_map, /* OUT */
                                 hb_map_t                          *reverse_glyph_map, /* OUT */
@@ -180,7 +181,7 @@
   }
   else
   {
-    *num_glyphs = glyphs[glyphs.length - 1] + 1;
+    *num_glyphs = face->get_num_glyphs ();
   }
 }
 
@@ -217,7 +218,8 @@
                                               plan->codepoint_to_glyph,
                                               &plan->glyphs_deprecated);
 
-  _create_old_gid_to_new_gid_map (input->retain_gids,
+  _create_old_gid_to_new_gid_map (face,
+                                  input->retain_gids,
 				  plan->glyphs_deprecated,
 				  plan->glyph_map,
                                   plan->reverse_glyph_map,