Stop rejecting BaseFontBlend as a Multiple Master CFF font - #10
Merged
soadzoor merged 1 commit intoSep 17, 2026
Merged
Conversation
Top DICT operator 12 23 is BaseFontBlend, not a Multiple Master marker. It is a delta array left behind by Multiple Master tooling; it carries no blend axes and no interpolation state, and the glyphs of a font holding it are exactly the ones in its CharStrings INDEX. A real PDF carries a font whose Top DICT has 12 23 with the values [408, -397] -- a plain delta -- and the whole document failed to render because of it. 12 20 SyntheticBase still rejects, and that one is substantive: those glyphs are defined against another font and cannot be read from this CharStrings INDEX alone. The message no longer claims Multiple Master support is the issue. The new case parses the same fixture twice, with and without BaseFontBlend, and asserts identical glyph names and identical outline commands -- so the entry is proven inert rather than merely tolerated. Refs soadzoor#2 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Owner
|
Thank you! |
soadzoor
added a commit
that referenced
this pull request
Sep 17, 2026
- 0.1.30 - Fix: use native ESM paths in Vite config - Prefer usable PDF output with bounded raster fallback and approximation warnings - Strengthen CFF BaseFontBlend regression coverage - Merge pull request #10 from sebgoubier/fix/cff-basefontblend-is-not-mm - Clarify stitching bounds tolerance and expand regression tests - Merge pull request #9 from sebgoubier/fix/stitching-bounds-plateau - Feat(pdf): Add support for ICC color profiles (qcms, lcms, and alternate) with fallback - Fix(pdf): recover Flate EOL padding without losing decoded output - Feat(pdf): synthesize cloudy borders for Square annotations - Feat(pdf): support underline borders on Square annotations - Feat(pdf): synthesize Square annotations with validated geometry - Test: reject invalid CIDSystemInfo strings - Merge pull request #5 from sebgoubier/fix/cid-system-info-nul-padding - Fix(tests): handle file URLs correctly on Windows - Merge pull request #4 from sebgoubier/fix/ccitt-b1-strictly-right-of-a0 - Stop rejecting BaseFontBlend as a Multiple Master CFF font - Treat repeated stitching Bounds as the empty subdomain they describe - Trim fixed-width NUL padding in /CIDSystemInfo strings - Fix CCITT b1 selection so vertical modes cannot move backwards Source-Revision: 5d761c9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What this fixes
A real PDF fails with
Synthetic or Multiple Master CFF fonts are not supported.Probed at the failure point, the font's Top DICT holds operator 12 23 with the values[408, -397].12 23 is not a Multiple Master marker. Per the CFF Top DICT layout it is BaseFontBlend, a
deltaarray — which is exactly the shape of those two values. It is a leftover from Multiple Master tooling and carries no blend axes and no interpolation state. A font holding it has exactly the glyphs in its CharStrings INDEX.So the check rejected an ordinary font over an inert metadata entry, and took the whole document with it.
What still rejects
12 20 SyntheticBase — and that one is substantive: those glyphs are defined against another font and cannot be read from this CharStrings INDEX alone. Only the message changed there, since it no longer needs to mention Multiple Master.
Test
testBaseFontBlendIsNotMultipleMasterparses the same fixture twice, with and without BaseFontBlend in its Top DICT, and asserts identical glyph names and identical outline commands. That proves the entry is inert rather than merely tolerated.buildCffFixturegained atopDictExtraoption to make that possible.Checks
npm run test:file -- scripts/test-native-cff-semantics.mjs— passesnpm test—tsc --noEmitclean, 36 / 37 fast files passnpm run test:integration— 41 / 41npm run test:unit— 66 / 68/UCR2refusal, reported separately)The two failing files also fail on
main; Windows-only path failures.Scope
CFF Top DICT only. Independent of #4 through #9.
Refs #2