[fonttools/fonttools] dc8ad6: [cmap] Don't drop subtables in unsupported formats

0 views
Skip to first unread message

Cosimo Lupo

unread,
Aug 20, 2026, 8:36:43 AM (6 days ago) Aug 20
to fontto...@googlegroups.com
Branch: refs/heads/main
Home: https://github.com/fonttools/fonttools
Commit: dc8ad6959ee94f2ea52d595a96af61f07acbcf40
https://github.com/fonttools/fonttools/commit/dc8ad6959ee94f2ea52d595a96af61f07acbcf40
Author: LuShadowX <supyallu...@gmail.com>
Date: 2026-07-26 (Sun, 26 Jul 2026)

Changed paths:
M Lib/fontTools/ttLib/tables/_c_m_a_p.py
M Tests/ttLib/tables/_c_m_a_p_test.py

Log Message:
-----------
[cmap] Don't drop subtables in unsupported formats


Commit: 4aeed07dafea0b747bb7861b4a08b40b75e19a00
https://github.com/fonttools/fonttools/commit/4aeed07dafea0b747bb7861b4a08b40b75e19a00
Author: Cosimo Lupo <cos...@anthrotype.com>
Date: 2026-08-20 (Thu, 20 Aug 2026)

Changed paths:
M .github/workflows/test.yml
M .github/workflows/wheels.yml
A Doc/partial-instancing-avar2-design.md
M Lib/fontTools/afmLib.py
M Lib/fontTools/agl.py
M Lib/fontTools/cffLib/CFF2ToCFF.py
M Lib/fontTools/cffLib/width.py
M Lib/fontTools/colorLib/builder.py
M Lib/fontTools/config/__init__.py
M Lib/fontTools/cu2qu/__main__.py
M Lib/fontTools/cu2qu/cu2qu.py
M Lib/fontTools/cu2qu/ufo.py
M Lib/fontTools/designspaceLib/__init__.py
M Lib/fontTools/designspaceLib/__main__.py
M Lib/fontTools/diff/__main__.py
M Lib/fontTools/encodings/codecs.py
M Lib/fontTools/feaLib/__main__.py
M Lib/fontTools/feaLib/builder.py
M Lib/fontTools/feaLib/parser.py
M Lib/fontTools/feaLib/variableScalar.py
M Lib/fontTools/fontBuilder.py
M Lib/fontTools/merge/__init__.py
M Lib/fontTools/merge/__main__.py
M Lib/fontTools/merge/base.py
M Lib/fontTools/merge/cmap.py
M Lib/fontTools/merge/layout.py
M Lib/fontTools/merge/tables.py
M Lib/fontTools/merge/util.py
M Lib/fontTools/misc/arrayTools.py
M Lib/fontTools/misc/bezierTools.py
M Lib/fontTools/misc/classifyTools.py
M Lib/fontTools/misc/cliTools.py
M Lib/fontTools/misc/configTools.py
M Lib/fontTools/misc/cython.py
M Lib/fontTools/misc/encodingTools.py
M Lib/fontTools/misc/enumTools.py
M Lib/fontTools/misc/etree.py
M Lib/fontTools/misc/fixedTools.py
M Lib/fontTools/misc/loggingTools.py
M Lib/fontTools/misc/plistlib/__init__.py
M Lib/fontTools/misc/psCharStrings.py
M Lib/fontTools/misc/psLib.py
M Lib/fontTools/misc/sstruct.py
M Lib/fontTools/misc/symfont.py
M Lib/fontTools/misc/textTools.py
M Lib/fontTools/misc/timeTools.py
M Lib/fontTools/misc/transform.py
M Lib/fontTools/misc/vector.py
M Lib/fontTools/misc/xmlReader.py
M Lib/fontTools/misc/xmlWriter.py
M Lib/fontTools/mtiLib/__init__.py
M Lib/fontTools/otlLib/builder.py
M Lib/fontTools/otlLib/optimize/__main__.py
M Lib/fontTools/pens/areaPen.py
M Lib/fontTools/pens/basePen.py
M Lib/fontTools/pens/boundsPen.py
M Lib/fontTools/pens/cairoPen.py
M Lib/fontTools/pens/cocoaPen.py
M Lib/fontTools/pens/perimeterPen.py
M Lib/fontTools/pens/pointInsidePen.py
M Lib/fontTools/pens/qtPen.py
M Lib/fontTools/pens/quartzPen.py
M Lib/fontTools/pens/recordingPen.py
M Lib/fontTools/pens/reportLabPen.py
M Lib/fontTools/pens/reverseContourPen.py
M Lib/fontTools/pens/roundingPen.py
M Lib/fontTools/pens/teePen.py
M Lib/fontTools/pens/transformPen.py
M Lib/fontTools/pens/ttGlyphPen.py
M Lib/fontTools/pens/wxPen.py
M Lib/fontTools/qu2cu/__main__.py
M Lib/fontTools/qu2cu/cli.py
M Lib/fontTools/qu2cu/qu2cu.py
M Lib/fontTools/subset/__init__.py
M Lib/fontTools/subset/__main__.py
M Lib/fontTools/subset/svg.py
M Lib/fontTools/svgLib/path/__init__.py
M Lib/fontTools/svgLib/path/arc.py
M Lib/fontTools/svgLib/path/parser.py
M Lib/fontTools/t1Lib/__init__.py
M Lib/fontTools/tfmLib.py
M Lib/fontTools/ttLib/__init__.py
M Lib/fontTools/ttLib/removeOverlaps.py
M Lib/fontTools/ttLib/reorderGlyphs.py
M Lib/fontTools/ttLib/scaleUpem.py
M Lib/fontTools/ttLib/sfnt.py
M Lib/fontTools/ttLib/tables/BitmapGlyphMetrics.py
M Lib/fontTools/ttLib/tables/E_B_D_T_.py
M Lib/fontTools/ttLib/tables/E_B_L_C_.py
M Lib/fontTools/ttLib/tables/F__e_a_t.py
M Lib/fontTools/ttLib/tables/G__l_a_t.py
M Lib/fontTools/ttLib/tables/G__l_o_c.py
M Lib/fontTools/ttLib/tables/O_S_2f_2.py
M Lib/fontTools/ttLib/tables/S_V_G_.py
M Lib/fontTools/ttLib/tables/S__i_l_f.py
M Lib/fontTools/ttLib/tables/S__i_l_l.py
M Lib/fontTools/ttLib/tables/T_S_I_B_.py
M Lib/fontTools/ttLib/tables/T_S_I_C_.py
M Lib/fontTools/ttLib/tables/T_S_I_D_.py
M Lib/fontTools/ttLib/tables/T_S_I_J_.py
M Lib/fontTools/ttLib/tables/T_S_I_P_.py
M Lib/fontTools/ttLib/tables/T_S_I_S_.py
M Lib/fontTools/ttLib/tables/T_S_I_V_.py
M Lib/fontTools/ttLib/tables/T_S_I__1.py
M Lib/fontTools/ttLib/tables/T_S_I__2.py
M Lib/fontTools/ttLib/tables/T_S_I__3.py
M Lib/fontTools/ttLib/tables/TupleVariation.py
M Lib/fontTools/ttLib/tables/_a_v_a_r.py
M Lib/fontTools/ttLib/tables/_c_m_a_p.py
M Lib/fontTools/ttLib/tables/_c_v_a_r.py
M Lib/fontTools/ttLib/tables/_f_v_a_r.py
M Lib/fontTools/ttLib/tables/_g_a_s_p.py
M Lib/fontTools/ttLib/tables/_g_l_y_f.py
M Lib/fontTools/ttLib/tables/_h_e_a_d.py
M Lib/fontTools/ttLib/tables/_h_h_e_a.py
M Lib/fontTools/ttLib/tables/_h_m_t_x.py
M Lib/fontTools/ttLib/tables/_k_e_r_n.py
M Lib/fontTools/ttLib/tables/_l_o_c_a.py
M Lib/fontTools/ttLib/tables/_n_a_m_e.py
M Lib/fontTools/ttLib/tables/_s_b_i_x.py
M Lib/fontTools/ttLib/tables/_t_r_a_k.py
M Lib/fontTools/ttLib/tables/_v_h_e_a.py
M Lib/fontTools/ttLib/tables/otTraverse.py
M Lib/fontTools/ttLib/tables/sbixGlyph.py
M Lib/fontTools/ttLib/tables/ttProgram.py
M Lib/fontTools/ttLib/woff2.py
M Lib/fontTools/ttx.py
M Lib/fontTools/ufoLib/errors.py
M Lib/fontTools/unicodedata/__init__.py
M Lib/fontTools/varLib/__init__.py
M Lib/fontTools/varLib/__main__.py
M Lib/fontTools/varLib/cff.py
M Lib/fontTools/varLib/instancer/__init__.py
M Lib/fontTools/varLib/instancer/featureVars.py
M Lib/fontTools/varLib/iup.py
M Lib/fontTools/varLib/merger.py
M Lib/fontTools/varLib/models.py
M Lib/fontTools/varLib/multiVarStore.py
M Lib/fontTools/varLib/mutator.py
M Lib/fontTools/varLib/varStore.py
M MetaTools/buildTableList.py
M MetaTools/buildUCD.py
M MetaTools/check_table_coverage.py
M MetaTools/roundTrip.py
M Snippets/compact_gpos.py
M Snippets/otf2ttf.py
M Snippets/rename-fonts.py
M Snippets/statShape.py
M Snippets/svg2glif.py
M Tests/afmLib/afmLib_test.py
M Tests/agl_test.py
M Tests/cffLib/cffLib_test.py
M Tests/colorLib/unbuilder_test.py
M Tests/cu2qu/cli_test.py
M Tests/cu2qu/cu2qu_test.py
M Tests/cu2qu/ufo_test.py
M Tests/designspaceLib/designspace_test.py
M Tests/feaLib/builder_test.py
M Tests/feaLib/lexer_test.py
M Tests/feaLib/parser_test.py
M Tests/feaLib/variableScalar_test.py
M Tests/merge/merge_test.py
M Tests/misc/bezierTools_test.py
M Tests/misc/loggingTools_test.py
M Tests/misc/macRes_test.py
M Tests/misc/plistlib_test.py
M Tests/misc/xmlReader_test.py
M Tests/misc/xmlWriter_test.py
M Tests/pens/cu2quPen_test.py
M Tests/pens/reverseContourPen_test.py
M Tests/pens/roundingPen_test.py
M Tests/pens/utils.py
M Tests/qu2cu/qu2cu_cli_test.py
M Tests/subset/subset_test.py
M Tests/subset/svg_test.py
M Tests/svgLib/path/path_test.py
M Tests/t1Lib/t1Lib_test.py
M Tests/ttLib/main_test.py
M Tests/ttLib/sfnt_test.py
M Tests/ttLib/tables/C_B_L_C_test.py
M Tests/ttLib/tables/C_F_F__2_test.py
M Tests/ttLib/tables/C_F_F_test.py
M Tests/ttLib/tables/C_O_L_R_test.py
M Tests/ttLib/tables/C_P_A_L_test.py
M Tests/ttLib/tables/D__e_b_g_test.py
M Tests/ttLib/tables/M_V_A_R_test.py
M Tests/ttLib/tables/S_T_A_T_test.py
M Tests/ttLib/tables/S_V_G__test.py
M Tests/ttLib/tables/T_S_I__1_test.py
M Tests/ttLib/tables/_a_n_k_r_test.py
M Tests/ttLib/tables/_a_v_a_r_test.py
M Tests/ttLib/tables/_b_s_l_n_test.py
M Tests/ttLib/tables/_c_i_d_g_test.py
M Tests/ttLib/tables/_c_m_a_p_test.py
M Tests/ttLib/tables/_c_v_a_r_test.py
M Tests/ttLib/tables/_f_v_a_r_test.py
M Tests/ttLib/tables/_g_c_i_d_test.py
M Tests/ttLib/tables/_g_v_a_r_test.py
M Tests/ttLib/tables/_h_h_e_a_test.py
M Tests/ttLib/tables/_k_e_r_n_test.py
M Tests/ttLib/tables/_l_c_a_r_test.py
M Tests/ttLib/tables/_m_e_t_a_test.py
M Tests/ttLib/tables/_m_o_r_t_test.py
M Tests/ttLib/tables/_m_o_r_x_test.py
M Tests/ttLib/tables/_o_p_b_d_test.py
M Tests/ttLib/tables/_p_r_o_p_test.py
M Tests/ttLib/tables/_t_r_a_k_test.py
M Tests/ttLib/tables/_v_h_e_a_test.py
M Tests/ttLib/tables/otConverters_test.py
M Tests/ttLib/tables/otTables_test.py
M Tests/ttLib/ttFont_test.py
M Tests/ttLib/woff2_test.py
M Tests/ufoLib/GLIF1_test.py
M Tests/ufoLib/UFOConversion_test.py
M Tests/ufoLib/testSupport.py
M Tests/unicodedata_test.py
M Tests/varLib/instancer/conftest.py
M Tests/varLib/instancer/instancer_test.py
M Tests/varLib/merger_test.py
M Tests/varLib/varLib_test.py
M Tests/varLib/varStore_test.py
M Tests/voltLib/volttofea_test.py
M dev-requirements.txt

Log Message:
-----------
Merge branch 'main' into cmap-unknown-format-preserve


Commit: 8ca989b1c4312da4d7fcea702102a5e5e94177af
https://github.com/fonttools/fonttools/commit/8ca989b1c4312da4d7fcea702102a5e5e94177af
Author: Cosimo Lupo <cos...@anthrotype.com>
Date: 2026-08-20 (Thu, 20 Aug 2026)

Changed paths:
M Lib/fontTools/ttLib/tables/_c_m_a_p.py
M Tests/ttLib/tables/_c_m_a_p_test.py

Log Message:
-----------
[cmap] Don't let unknown-format subtables recurse in __getattr__

CmapSubtable.__getattr__ retries after ensureDecompiled(), relying on it
clearing self.data to terminate. Keeping the data means any missing
attribute -- hasattr(subtable, "length"), say -- recurses until the stack
blows instead of raising AttributeError.


Commit: 1b7a1273a45455e02a7fbda2542c9837280ecc31
https://github.com/fonttools/fonttools/commit/1b7a1273a45455e02a7fbda2542c9837280ecc31
Author: Cosimo Lupo <cos...@anthrotype.com>
Date: 2026-08-20 (Thu, 20 Aug 2026)

Changed paths:
M Lib/fontTools/ttLib/tables/_c_m_a_p.py
M Tests/ttLib/tables/_c_m_a_p_test.py

Log Message:
-----------
Merge pull request #4136 from LuShadowX/cmap-unknown-format-preserve

[cmap] Don't drop subtables in unsupported formats


Compare: https://github.com/fonttools/fonttools/compare/75fac8ec6d49...1b7a1273a454

To unsubscribe from these emails, change your notification settings at https://github.com/fonttools/fonttools/settings/notifications
Reply all
Reply to author
Forward
0 new messages