Bumps fonttools from 4.53.1 to 4.61.0.
Release notes
Sourced from fonttools's releases.
4.61.0
- [varLib.main]: SECURITY Only use basename(vf.filename) to prevent path traversal attacks when running
fonttools varLib command-line script, or code which invokes fonttools.varLib.main(). Fixes CVE-2025-66034, see: GHSA-768j-98cg-p3fv.
- [feaLib] Sort BaseLangSysRecords by tag (#3986).
- Drop support for EOL Python 3.9 (#3982).
- [instancer] Support --remove-overlaps for fonts with CFF2 table (#3975).
- [CFF2ToCFF] Add --remove-overlaps option (#3976).
- [feaLib] Raise an error for rsub with NULL target (#3979).
- [bezierTools] Fix logic bug in curveCurveIntersections (#3963).
- [feaLib] Error when condition sets have the same name (#3958).
- [cu2qu.ufo] skip processing empty glyphs to support sparse kerning masters (#3956).
- [unicodedata] Update to Unicode 17. Require
unicodedata2 >= 17.0.0 when installed with 'unicode' extra.
4.60.1
- [ufoLib] Reverted accidental method name change in
UFOReader.getKerningGroupConversionRenameMaps
that broke compatibility with downstream projects like defcon (#3948, #3947, robotools/defcon#478).
- [ufoLib] Added test coverage for
getKerningGroupConversionRenameMaps method (#3950).
- [subset] Don't try to subset BASE table; pass it through by default instead (#3949).
- [subset] Remove empty BaseRecord entries in MarkBasePos lookups (#3897, #3892).
- [subset] Add pruning for MarkLigPos and MarkMarkPos lookups (#3946).
- [subset] Remove duplicate features when subsetting (#3945).
- [Docs] Added documentation for the visitor module (#3944).
4.60.0
-
[pointPen] Allow reverseFlipped parameter of DecomposingPointPen to take a ReverseFlipped enum value to control whether/how to reverse contour direction of flipped components, in addition to the existing True/False. This allows to set ReverseFlipped.ON_CURVE_FIRST to ensure that the decomposed outline starts with an on-curve point before being reversed, for better consistency with other segment-oriented contour transformations. The change is backward compatible, and the default behavior hasn't changed (#3934).
-
[filterPen] Added ContourFilterPointPen, base pen for buffered contour operations, and OnCurveStartPointPen filter to ensure contours start with an on-curve point (#3934).
-
[cu2qu] Fixed difference in cython vs pure-python complex division by real number (#3930).
-
[varLib.avar] Refactored and added some new sub-modules and scripts (#3926).
varLib.avar.build module to build avar (and a missing fvar) binaries into a possibly empty TTFont,
varLib.avar.unbuild module to print a .designspace snippet that would generate the same avar binary,
varLib.avar.map module to take TTFont and do the mapping, in user/normalized space,
varLib.avar.plan module moved from varLib.avarPlanner.
The bare fonttools varLib.avar script is deprecated, in favour of fonttools varLib.avar.build (or unbuild).
-
[interpolatable] Clarify linear_sum_assignment backend options and minimal dependency usage (#3927).
-
[post] Speed up build_psNameMapping (#3923).
-
[ufoLib] Added typing annotations to fontTools.ufoLib (#3875).
4.59.2
- [varLib] Clear
USE_MY_METRICS component flags when inconsistent across masters (#3912).
- [varLib.instancer] Avoid negative advance width/height values when instatiating HVAR/VVAR, (unlikely in well-behaved fonts) (#3918).
- [subset] Fix shaping behaviour when pruning empty mark sets (#3915, harfbuzz/harfbuzz#5499).
- [cu2qu] Fixed
dot() product of perpendicular vectors not always returning exactly 0.0 in all Python implementations (#3911)
- [varLib.instancer] Implemented fully-instantiating
avar2 fonts (#3909).
- [feaLib] Allow float values in
VariableScalar's axis locations (#3906, #3907).
- [cu2qu] Handle special case in
calc_intersect for degenerate cubic curves where 3 to 4 control points are equal (#3904).
4.59.1
- [featureVars] Update OS/2.usMaxContext if possible after addFeatureVariationsRaw (#3894).
- [vhmtx] raise TTLibError('not enough data...') when hmtx/vmtx are truncated (#3843, #3901).
- [feaLib] Combine duplicate features that have the same set of lookups regardless of the order in which those lookups are added to the feature (#3895).
... (truncated)
Changelog
Sourced from fonttools's changelog.
4.61.0 (released 2025年11月28日)
- [varLib.main]: SECURITY Only use basename(vf.filename) to prevent path traversal attacks when
running
fonttools varLib command, or code which invokes fonttools.varLib.main().
Fixes CVE-2025-66034, see:
GHSA-768j-98cg-p3fv.
- [feaLib] Sort BaseLangSysRecords by tag (#3986).
- Drop support for EOL Python 3.9 (#3982).
- [instancer] Support --remove-overlaps for fonts with CFF2 table (#3975).
- [CFF2ToCFF] Add --remove-overlaps option (#3976).
- [feaLib] Raise an error for rsub with NULL target (#3979).
- [bezierTools] Fix logic bug in curveCurveIntersections (#3963).
- [feaLib] Error when condition sets have the same name (#3958).
- [cu2qu.ufo] skip processing empty glyphs to support sparse kerning masters (#3956).
- [unicodedata] Update to Unicode 17. Require
unicodedata2 >= 17.0.0 when installed with 'unicode' extra.
4.60.1 (released 2025年09月29日)
- [ufoLib] Reverted accidental method name change in
UFOReader.getKerningGroupConversionRenameMaps
that broke compatibility with downstream projects like defcon (#3948, #3947, robotools/defcon#478).
- [ufoLib] Added test coverage for
getKerningGroupConversionRenameMaps method (#3950).
- [subset] Don't try to subset BASE table; pass it through by default instead (#3949).
- [subset] Remove empty BaseRecord entries in MarkBasePos lookups (#3897, #3892).
- [subset] Add pruning for MarkLigPos and MarkMarkPos lookups (#3946).
- [subset] Remove duplicate features when subsetting (#3945).
- [Docs] Added documentation for the visitor module (#3944).
4.60.0 (released 2025年09月17日)
- [pointPen] Allow
reverseFlipped parameter of DecomposingPointPen to take a ReverseFlipped
enum value to control whether/how to reverse contour direction of flipped components, in addition to
the existing True/False. This allows to set ReverseFlipped.ON_CURVE_FIRST to ensure that
the decomposed outline starts with an on-curve point before being reversed, for better consistency
with other segment-oriented contour transformations. The change is backward compatible, and the
default behavior hasn't changed (#3934).
- [filterPen] Added
ContourFilterPointPen, base pen for buffered contour operations, and
OnCurveStartPointPen filter to ensure contours start with an on-curve point (#3934).
- [cu2qu] Fixed difference in cython vs pure-python complex division by real number (#3930).
- [varLib.avar] Refactored and added some new sub-modules and scripts (#3926).
varLib.avar.build module to build avar (and a missing fvar) binaries into a possibly empty TTFont,
varLib.avar.unbuild module to print a .designspace snippet that would generate the same avar binary,
varLib.avar.map module to take TTFont and do the mapping, in user/normalized space,
varLib.avar.plan module moved from varLib.avarPlanner.
The bare fonttools varLib.avar script is deprecated, in favour of fonttools varLib.avar.build (or unbuild).
- [interpolatable] Clarify
linear_sum_assignment backend options and minimal dependency
usage (#3927).
- [post] Speed up
build_psNameMapping (#3923).
... (truncated)
Commits
e691e3b Release 4.61.0
c2d540f Update NEWS.rst
3859753 Update NEWS.rst
26eb070 black
5ff73af Merge commit from fork
a696d5b varLib: only use the basename(vf.filename)
b00bc45 varLib_test: test path traversal in variable-font filename
066512e Merge pull request #3986 from cmyr/base-minmax-sorting
ce78973 [feaLib] Sort BasLangSysRecords by tag
5bb37dc Merge pull request #3983 from fonttools/dependabot/pip/brotli-1.2.0
- Additional commits viewable in compare view
Dependabot compatibility score
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase will rebase this PR
@dependabot recreate will recreate this PR, overwriting any edits that have been made to it
@dependabot merge will merge this PR after your CI passes on it
@dependabot squash and merge will squash and merge this PR after your CI passes on it
@dependabot cancel merge will cancel a previously requested merge and block automerging
@dependabot reopen will reopen this PR if it is closed
@dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
@dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the Security Alerts page.
Bumps fonttools from 4.53.1 to 4.61.0.
Release notes
Sourced from fonttools's releases.
... (truncated)
Changelog
Sourced from fonttools's changelog.
... (truncated)
Commits
e691e3bRelease 4.61.0c2d540fUpdate NEWS.rst3859753Update NEWS.rst26eb070black5ff73afMerge commit from forka696d5bvarLib: only use the basename(vf.filename)b00bc45varLib_test: test path traversal in variable-font filename066512eMerge pull request #3986 from cmyr/base-minmax-sortingce78973[feaLib] Sort BasLangSysRecords by tag5bb37dcMerge pull request #3983 from fonttools/dependabot/pip/brotli-1.2.0Dependabot compatibility score
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)You can disable automated security fix PRs for this repo from the Security Alerts page.