chore(deps): update dependency fonttools to v4.60.2 [security] #78
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==4.44.0→==4.60.2GitHub Vulnerability Alerts
CVE-2025-66034
Summary
The
fonttools varLib(orpython3 -m fontTools.varLib) script has an arbitrary file write vulnerability that leads to remote code execution when a malicious .designspace file is processed. The vulnerability affects themain()code path offontTools.varLib, used by the fonttools varLib CLI and any code that invokesfontTools.varLib.main().The vulnerability exists due to unsanitised filename handling combined with content injection. Attackers can write files to arbitrary filesystem locations via path traversal sequences, and inject malicious code (like PHP) into the output files through XML injection in labelname elements. When these files are placed in web-accessible locations and executed, this achieves remote code execution without requiring any elevated privileges. Once RCE is obtained, attackers can further escalate privileges to compromise system files (like overwriting
/etc/passwd).Overall this allows attackers to:
The attacker controls the file location, extension and contents which could lead to remote code execution as well as enabling a denial of service through file corruption means.
Affected Lines
fontTools/varLib/__init__.pyPoC
malicious.designspaceand respectivesource-*.ttffiles in a directory like/Users/<username>/testing/demo/(will impact relative file location within malicious.designspace)setup.pymalicious.designspaceOptional: You can put a file with any material within
../../tmp/newarbitraryfile.jsonin advance, the contents in the file will be overwritten after running the setup script in the following step.source-*.tfffiles required for the malicious.designspace file.malicious2.designspaceHere being outputted to a localised area ignoring filename presented in variable-font
to show
<?php echo shell_exec("/usr/bin/touch /tmp/MEOW123");?>]]>we can see that the file was just created showing RCE.
Recommendations
Release Notes
fonttools/fonttools (fonttools)
v4.60.2Compare Source
v4.60.1Compare Source
UFOReader.getKerningGroupConversionRenameMapsthat broke compatibility with downstream projects like defcon (#3948, #3947, robotools/defcon#478).
getKerningGroupConversionRenameMapsmethod (#3950).v4.60.0Compare Source
[pointPen] Allow
reverseFlippedparameter ofDecomposingPointPento take aReverseFlippedenum value to control whether/how to reverse contour direction of flipped components, in addition to the existing True/False. This allows to setReverseFlipped.ON_CURVE_FIRSTto 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, andOnCurveStartPointPenfilter 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.buildmodule to build avar (and a missing fvar) binaries into a possibly empty TTFont,varLib.avar.unbuildmodule to print a .designspace snippet that would generate the same avar binary,varLib.avar.mapmodule to take TTFont and do the mapping, in user/normalized space,varLib.avar.planmodule moved fromvarLib.avarPlanner.The bare
fonttools varLib.avarscript is deprecated, in favour offonttools varLib.avar.build(orunbuild).[interpolatable] Clarify
linear_sum_assignmentbackend options and minimal dependency usage (#3927).[post] Speed up
build_psNameMapping(#3923).[ufoLib] Added typing annotations to fontTools.ufoLib (#3875).
v4.59.2Compare Source
USE_MY_METRICScomponent flags when inconsistent across masters (#3912).dot()product of perpendicular vectors not always returning exactly 0.0 in all Python implementations (#3911)avar2fonts (#3909).VariableScalar's axis locations (#3906, #3907).calc_intersectfor degenerate cubic curves where 3 to 4 control points are equal (#3904).v4.59.1Compare Source
varLib.mutatorin favor ofvarLib.instancer. The latter provides equivalent full (static font) instancing in addition to partial VF instancing.CLI users should replace
fonttools varLib.mutatorwithfonttools varLib.instancer. API users should migrate tofontTools.varLib.instancer.instantiateVariableFont(#2680).v4.59.0Compare Source
fspackage) fromfonttools[ufo]extra. This is replaced by thefontTools.misc.filesystempackage, a stdlib-only, drop-in replacement for the subset of the pyfilesystem2's API used byfontTools.ufoLib. The latter should continue to work with the upstreamfs(we even test with/without). However, clients who wish to continue usingfscan do so by depending on it directly instead of via thefonttools[ufo]extra (#3885, #3620)..addComponent()implementations, in particularbaseGlyphNamevsglyphName(#3880).v4.58.5Compare Source
v4.58.4Compare Source
v4.58.3Compare Source
v4.58.2Compare Source
v4.58.1Compare Source
Timer._timea static method that doesn't take self, makes it easier to override (#3836).Nonefor empty ConditionSet, which translates to a null offset in the compiled table (#3850).aaltfeature (#3847).LangSysin aScriptRecordif missing when adding feature variations to existing GSUB later in the build (#3838).main().v4.58.0Compare Source
GVARtable (#3728)AttributeErrorwhen reporting table overflow (#3808)<NULL>in single pos lookups (#3803)instead of silently ignoring it (#3811)
fonttools voltLibcommand line tool to compile VOLT sources directly (doing an intermediate fea conversion internally) (#3818)v4.57.0Compare Source
ttLib.__main__] Add--no-recalc-timestampflag (#3771)ttLib.__main__] Add-b(recalcBBoxes=False) flag (#3772)ttLib.__main__] Improvements around the-tflag (#3776)GPOS(#3794)v4.56.0Compare Source
DeltaValuerepeat value which caused a crash after importing from XML and then compiling a GPOS containing Device tables (#3758).FeatureLibErrorpickleable, so client can e.g. use feaLib to can compile features in parallel with multiprocessing (#3762).v4.55.8Compare Source
v4.55.7Compare Source
v4.55.6Compare Source
v4.55.5Compare Source
v4.55.4Compare Source
splitCubicAtTsometimes not returning identical start/end points as result of numerical precision (#3742, #3743).AlternateSubstStatement(#3735).v4.55.3Compare Source
v4.55.2Compare Source
v4.55.1Compare Source
v4.55.0Compare Source
v4.54.1Compare Source
\in doc stringv4.54.0Compare Source
v4.53.1Compare Source
4.53.1
v4.53.0Compare Source
v4.52.4Compare Source
v4.52.3Compare Source
Fixed a small syntax error in the reStructuredText-formatted NEWS.rst file which caused the upload to PyPI to fail for 4.52.2. No other code changes.
v4.52.1Compare Source
Fixed a small syntax error in the reStructuredText-formatted NEWS.rst file which caused the upload to PyPI to fail for 4.52.0.
No other code changes.
v4.51.0Compare Source
v4.50.0Compare Source
v4.49.0Compare Source
MATHtable (#3446)v4.48.1Compare Source
v4.47.2Compare Source
Minor release to fix uploading wheels to PyPI.
v4.47.0Compare Source
getMasterScalarsandinterpolateFromValuesAndScalars.public.fontInfolib key, not used anywhere yet (#3358).v4.46.0Compare Source
addFeatureVariationsfunction can now take a list of featureTags; similarly, the lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can now take a comma-separateed string of feature tags (e.g. "salt,ss01") instead of a single tag (#3360).VarLibErrorif the feature tag already has feature variations associated with it (#3363).addGSUBFeatureVariationsfunction to add GSUB Feature Variations to an existing variable font from rules defined in a DesignSpace document (#3362).v4.45.1Compare Source
v4.45.0Compare Source
--pdfand--htmloptions to generate a PDF or HTML report of the interpolation issues.The PDF/HTML report showcases the problematic masters, the interpolated broken glyph, as well as the proposed fixed version.
v4.44.3Compare Source
v4.44.1Compare Source
recalcCodePageRangesto OS/2 table class; added--prune-codepage-rangestofonttools subsetcommand (#3328, #2607).NOTE: this release was "yanked" from PyPI because it introduced a regression: #3334
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.