fixed FDSelect size calcluation
diff --git a/src/hb-ot-cff-common.hh b/src/hb-ot-cff-common.hh index 2f5e2f8..7a1175c 100644 --- a/src/hb-ot-cff-common.hh +++ b/src/hb-ot-cff-common.hh
@@ -632,7 +632,7 @@ FDSelect3_4_Range<GID_TYPE, FD_TYPE> ranges[VAR]; /* GID_TYPE sentinel */ - DEFINE_SIZE_ARRAY (GID_TYPE::static_size * 2, ranges); + DEFINE_SIZE_ARRAY (GID_TYPE::static_size, ranges); }; typedef FDSelect3_4<HBUINT16, HBUINT8> FDSelect3;
diff --git a/src/hb-subset-cff-common.cc b/src/hb-subset-cff-common.cc index f5fcebd..b319a9a 100644 --- a/src/hb-subset-cff-common.cc +++ b/src/hb-subset-cff-common.cc
@@ -112,14 +112,14 @@ { assert (src.format == 4); subset_fdselect_format = 4; - subset_fdselect_size = FDSelect4::min_size + FDSelect4_Range::static_size * num_ranges + HBUINT32::static_size; + subset_fdselect_size = FDSelect::min_size + FDSelect4::min_size + FDSelect4_Range::static_size * num_ranges + HBUINT32::static_size; } else { #if CFF_SERIALIZE_FDSELECT_0 - unsigned int format0_size = FDSelect0::min_size + HBUINT8::static_size * subset_num_glyphs; + unsigned int format0_size = FDSelect::min_size + FDSelect0::min_size + HBUINT8::static_size * subset_num_glyphs; #endif - unsigned int format3_size = FDSelect3::min_size + FDSelect3_Range::static_size * num_ranges + HBUINT16::static_size; + unsigned int format3_size = FDSelect::min_size + FDSelect3::min_size + FDSelect3_Range::static_size * num_ranges + HBUINT16::static_size; #if CFF_SERIALIZE_FDSELECT_0 if (format0_size <= format3_size)
diff --git a/test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf b/test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf index b4d1165..08bc0e0 100644 --- a/test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf +++ b/test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf Binary files differ