Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

open-sauce-sans: latin-400-normal.woff2 is a Type 1/PFB font under a .woff2 extension, not a valid WOFF2

Open
#161 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
52/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Domain
frontend

Research direction

Start with files/open-sauce-sans-latin-400-normal.woff2 and compare it with the adjacent 400 .woff and the other valid woff2 files. Validate the artifact with fontTools and Chromium using the supplied FontFace repro; done means the 400 woff2 parses successfully and renders with metrics matching the intended regular font.

Written by the indexing model from the issue text.

Description

Package

@fontsource/open-sauce-sans 5.2.5 (directory fonts/other/open-sauce-sans)

File

files/open-sauce-sans-latin-400-normal.woff2

Summary

This file is not a WOFF2 font. It's a Type 1 PostScript font wrapped in PFB (Printer Font Binary) framing, shipped under a .woff2 extension. Every other weight/format combination in the package (500/700/800/900 woff2, and the 400 .woff sitting right next to this file) is a normal, valid font file.

How we found it

Loading all Open Sauce Sans faces in Chromium and measuring the rendered advance width of the same 68-character string at 14px (one FontFace per face, nowrap span):

weight woff2 (px) woff (px)
400 407.05 493.77
500 594.90 594.90
700 602.50 602.50
800 607.60 607.60
900 612.60 612.60

Only weight 400 disagrees between formats, and Chromium reports that FontFace's .status as "error" — the browser fetches the woff2, fails to parse it, and silently falls back to the woff2's declared next src (or the next @font-face rule) without ever drawing it. 407px is also out of the family's natural progression: nothing below the 500 weight (594.9px) should render narrower than the 400.

Root cause

Parsing the file with fontTools.ttLib.TTFont(...) fails with Not a TrueType or OpenType font (bad sfntVersion). Its first bytes are 80 01 33 11 00 00 25 21 50 53 2D 41 64 6F 62 65 — a PFB segment marker (0x80 0x01, ASCII segment, length 0x00001133 = 4403 bytes) followed by %!PS-Adobe. Parsing the full PFB structure (three segments: ASCII header, encrypted binary body, ASCII trailer, 0x80 0x03 EOF) succeeds cleanly and the header segment reads:

%!PS-AdobeFont-1.0: OpenSauceSans-Regular 1.477
%%Title: OpenSauceSans-Regular

So it's a genuine Type 1 build of Open Sauce Sans Regular — just the wrong artifact landed at this path in the published package, almost certainly a build-pipeline mixup between a Type 1/PFB intermediate and the intended WOFF2 output for this one weight.

Impact

Every page that requests Open Sauce Sans 400 (Regular) fetches this 50 KB file, fails to parse it as a font, and re-fetches/falls back to the adjacent .woff (which is a correct, valid WOFF font matching the intended metrics). That's a wasted request plus a failed-parse console warning on every cold load for any consumer that follows the package's declared woff2 → woff src order.

Repro
const res = await fetch('https://esm.sh/@fontsource/[email protected]/files/open-sauce-sans-latin-400-normal.woff2');
const buf = new Uint8Array(await res.arrayBuffer());
console.log([...buf.slice(0, 16)].map(b => b.toString(16).padStart(2, '0')).join(' '));
// 80 01 33 11 00 00 25 21 50 53 2d 41 64 6f 62 65  ->  "%!PS-Adobe..." after the PFB header

or locally:

const ff = new FontFace('probe', `url(/files/open-sauce-sans-latin-400-normal.woff2) format("woff2")`);
ff.load().catch(e => console.log(ff.status, e)); // status: "error"
Expected

open-sauce-sans-latin-400-normal.woff2 should be a valid WOFF2 build of Open Sauce Sans Regular, matching the metrics of the adjacent open-sauce-sans-latin-400-normal.woff (same 68-char string should render ~493.77px, not ~407.05px).

Dominant language
CSS
Stars
500
Forks
72
Avg merge
22h 49m
Merged PRs (30d)
2

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fontsource/font-files

All issues in fontsource/font-files

Similar issues

More Web Dev issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.