deps: ttf-parser unmaintained (RUSTSEC-2026-0192) has no fixed version — trim/alternative options for the plotting font stack
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 4.5k
- Forks
- 603
- Avg merge
- 23h 32m
- Merged PRs (30d)
- 59
Description
Companion tracking follow-up from the same security-dependency audit (see the quick-xml issue).
The advisory: RUSTSEC-2026-0192 — ttf-parser is unmaintained. Not a vulnerability; an ecosystem-risk flag. It fails the cargo deny advisories check.
Why no version bump fixes it: no fixed version exists (the crate is unmaintained at every version), and it enters the tree at two points:
ttf-parser (0.15.2 / 0.20.0 / 0.25.1) <- plotters 0.3.7 <- criterion, ruvector-bench, ruvector-benchmarks
ttf-parser <- owned_ttf_parser (ab_glyph font stack)
Note the trap we hit while checking alternatives: switching plotters' font backend to ab_glyph does NOT remove ttf-parser — ab_glyph depends on owned_ttf_parser, which wraps the same crate. Most of the Rust font-parsing ecosystem currently sits on ttf-parser, which is also why "unmaintained" here is lower-risk than it sounds: it is extremely widely deployed and font parsing here only ever touches trusted, locally-bundled fonts in benchmark plot rendering.
Alternatives worth considering:
- Trim where it comes from: criterion pulls plotters only for HTML reports — if those aren't used in CI,
default-features = falseon criterion (keepingcargo_bench_support) drops one entry path. The direct plotters deps in the two bench crates would need the same font-free configuration or a text-free backend. - Plot outside the graph: emit CSV/JSON from benches and render with external tooling; removes plotters (and the entire font stack) from the workspace.
- Accept + monitor (what the audit branch documents meanwhile): a
deny.tomlignore with rationale, revisited if the advisory ever escalates from unmaintained to vulnerable, or if plotters moves off ttf-parser upstream.
Given the trusted-input usage, option 3 is defensible long-term; filing this so the ignore entry has a visible home rather than being silent configuration.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by inspecting the dependency paths for criterion, ruvector-bench, ruvector-benchmarks, plotters, and owned_ttf_parser, then read the existing deny.toml audit rationale. Compare the proposed font-free, external-rendering, and monitored-ignore options. Done means one option is selected, its dependency or audit configuration is updated, and the cargo deny check confirms the intended result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- build-system, security
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100