diff --git a/src/hb-ot-var-gvar-table.hh b/src/hb-ot-var-gvar-table.hh index 7bbaed35e..712fd73d8 100644 --- a/src/hb-ot-var-gvar-table.hh +++ b/src/hb-ot-var-gvar-table.hh @@ -359,7 +359,10 @@ struct gvar out->glyphCountX = hb_min (0xFFFFu, num_glyphs); unsigned glyph_var_data_size = glyph_vars.compiled_byte_size (); - bool long_offset = glyph_var_data_size & ~0xFFFFu || force_long_offsets; + /* According to the spec: If the short format (Offset16) is used for offsets, + * the value stored is the offset divided by 2, so the maximum data size should + * be 2 * 0xFFFFu, which is 0x1FFFEu */ + bool long_offset = glyph_var_data_size > 0x1FFFEu || force_long_offsets; out->flags = long_offset ? 1 : 0; HBUINT8 *glyph_var_data_offsets = c->allocate_size ((long_offset ? 4 : 2) * (num_glyphs + 1), false); @@ -440,7 +443,10 @@ struct gvar subset_data_size += get_glyph_var_data_bytes (c->source_blob, glyph_count, old_gid).length; } - bool long_offset = (subset_data_size & ~0xFFFFu); + /* According to the spec: If the short format (Offset16) is used for offsets, + * the value stored is the offset divided by 2, so the maximum data size should + * be 2 * 0xFFFFu, which is 0x1FFFEu */ + bool long_offset = subset_data_size > 0x1FFFEu; #ifdef HB_EXPERIMENTAL_API long_offset = long_offset || (c->plan->flags & HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); #endif diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.all.ttf index 77658843e..7cbe2a782 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.all.ttf index b752b3c6f..7dcbaf311 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.all.ttf index d56038627..cc29c9874 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.all.ttf index 77658843e..7cbe2a782 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.all.ttf index 3a16f49c7..5611fef10 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.all.ttf index 94e6c21e0..54e5f10db 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.all.ttf index c52f12cf4..ef2ed9b9a 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.all.ttf index 3aad013e1..c4fe77d29 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.all.ttf index 77658843e..7cbe2a782 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.all.ttf index 77658843e..7cbe2a782 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.all.ttf index 77658843e..7cbe2a782 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.all.ttf index 2f4b98715..37f20a1ba 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids-glyph-names.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids-glyph-names.all.ttf index 42554dcc0..835fab8aa 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids-glyph-names.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids-glyph-names.all.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.all.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.all.ttf index b19ee0fc8..eaf6a34ee 100644 Binary files a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.all.ttf and b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.all.ttf differ diff --git a/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.iup_optimize.ttf b/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.iup_optimize.ttf index b20d32863..04ab23b36 100644 Binary files a/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.iup_optimize.ttf and b/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.iup_optimize.ttf differ diff --git a/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.ttf b/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.ttf index 781934111..943c0538e 100644 Binary files a/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.ttf and b/test/subset/data/expected/update_def_wght/SourceSerifVariable-Roman.default.all.wght=300-600.ttf differ