fixed CFF1 subset of std encoding & non-std charset combo
authorMichiharu Ariza <ariza@adobe.com>
Thu, 15 Nov 2018 18:54:15 +0000 (10:54 -0800)
committerMichiharu Ariza <ariza@adobe.com>
Thu, 15 Nov 2018 18:54:15 +0000 (10:54 -0800)
src/hb-ot-cff-common.hh
src/hb-ot-cff1-table.hh
src/hb-subset-cff1.cc

index db4b46d..403fd98 100644 (file)
@@ -389,13 +389,11 @@ struct Dict : UnsizedByteStr
 
   inline static bool serialize_offset4_op (hb_serialize_context_t *c, OpCode op, int value)
   {
-    if (value == 0) return true;
     return serialize_uint4_op (c, op, value);
   }
 
   inline static bool serialize_offset2_op (hb_serialize_context_t *c, OpCode op, int value)
   {
-    if (value == 0) return true;
     return serialize_uint2_op (c, op, value);
   }
 };
index c3b293c..902d972 100644 (file)
@@ -770,11 +770,13 @@ struct CFF1TopDictOpSet : TopDictOpSet<CFF1TopDictVal>
       case OpCode_Encoding:
         dictval.EncodingOffset = env.argStack.pop_uint ();
         env.clear_args ();
+        if (unlikely (dictval.EncodingOffset == 0)) return;
         break;
 
       case OpCode_charset:
         dictval.CharsetOffset = env.argStack.pop_uint ();
         env.clear_args ();
+        if (unlikely (dictval.CharsetOffset == 0)) return;
         break;
 
       case OpCode_FDSelect:
index 1791bbd..57cb3d0 100644 (file)
@@ -735,12 +735,13 @@ struct cff_subset_plan {
     final_size += offsets.globalSubrsInfo.size;
 
     /* Encoding */
-    if (!subset_encoding && acc.is_predef_charset ())
+    if (!subset_encoding)
       offsets.encodingOffset = acc.topDict.EncodingOffset;
     else
+    {
       offsets.encodingOffset = final_size;
-    if (subset_encoding)
       final_size += plan_subset_encoding (acc, plan);
+    }
 
     /* Charset */
     if (!subset_charset && acc.is_predef_charset ())