ensure fdmap initialized as identity for single-FD (non-CID) fonts
diff --git a/src/hb-subset-cff1.cc b/src/hb-subset-cff1.cc
index c889e10..459da5c 100644
--- a/src/hb-subset-cff1.cc
+++ b/src/hb-subset-cff1.cc
@@ -647,8 +647,9 @@
     }
 
     /* Determine re-mapping of font index as fdmap among other info */
-    if (acc.fdSelect != &Null(CFF1FDSelect)
-        && unlikely (!hb_plan_subset_cff_fdselect (plan->glyphs,
+    if (acc.fdSelect != &Null(CFF1FDSelect))
+    {
+        if (unlikely (!hb_plan_subset_cff_fdselect (plan->glyphs,
                                   orig_fdcount,
                                   *acc.fdSelect,
                                   subset_fdcount,
@@ -657,6 +658,9 @@
                                   subset_fdselect_ranges,
                                   fdmap)))
         return false;
+    }
+    else
+      fdmap.identity (1);
 
     /* remove unused SIDs & reassign SIDs */
     {
@@ -790,7 +794,10 @@
         unsigned int  priv_size = PrivateDict::calculate_serialized_size (acc.privateDicts[i], privSzr, has_localsubrs);
         TableInfo  privInfo = { final_size, priv_size, 0 };
         FontDictValuesMod fontdict_mod;
-        fontdict_mod.init ( &acc.fontDicts[i], sidmap[acc.fontDicts[i].fontName], privInfo );
+        if (!acc.is_CID ())
+          fontdict_mod.init ( &Null(CFF1FontDictValues), CFF_UNDEF_SID, privInfo );
+        else
+          fontdict_mod.init ( &acc.fontDicts[i], sidmap[acc.fontDicts[i].fontName], privInfo );
         fontdicts_mod.push (fontdict_mod);
         final_size += privInfo.size;
 
diff --git a/src/hb-subset-cff2.cc b/src/hb-subset-cff2.cc
index a30bc27..49de995 100644
--- a/src/hb-subset-cff2.cc
+++ b/src/hb-subset-cff2.cc
@@ -356,6 +356,8 @@
       
       final_size += offsets.FDSelectInfo.size;
     }
+    else
+      fdmap.identity (1);
 
     /* FDArray (FDIndex) */
     {