rust-cli / rust-cli/env_logger
Sanitization requires color, which parses every record
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 1.1k
- Forks
- 149
- Avg merge
- 2h 42m
- Merged PRs (30d)
- 4
Description
Problem
With styling disabled, AutoStream still walks every record through anstyle-parse's VT state machine, roughly doubling per-record cost even for builds emitting no styling.
Target::Stderr → /dev/null, 161-byte records, 500k iterations, release + LTO, 8 interleaved rounds:
| ns/record | |
|---|---|
with color |
596 |
without color |
302 |
Turning off just auto-color doesn't avoid it — WriteStyle::Auto then collapses to Never (src/writer/mod.rs:134), making the parse unconditional. Only dropping color entirely removes the parser.
However dropping color also removes sanitization, as the two share a code path, so untrusted input then reaches the reader's terminal verbatim:
Note: deactivating the build-time feature
coloris not a mitigation as that
removes all ANSI escape code stripping fromenv_logger.
Neither configuration avoids both. The coupling isn't required though: without color there is no styling emitted, so nothing needs parsing, only payload bytes need neutralizing.
Proposal
Escape C0 and DEL as \xNN when color is off, sparing \n and \t.
- 319 ns/record measured, so sanitizing costs ~17 ns over the unsafe build today
colorpath untouched, no behavior change for anyone using it- differs from the strip it replaces in both directions:
- stricter on
\r, VT and FF, whichanstreampasses through - more permissive on raw C1 and stray continuation bytes, which
anstreamdrops (matching it there needs full UTF-8 validation — ~20 lines, free for ASCII records, ~+40 ns/record for records with legitimate non-ASCII)
- stricter on
Contributor guide
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 in src/writer/mod.rs:134 and trace AutoStream's color-disabled path through the sanitization and anstyle-parse handling. Reproduce the stated benchmark, then verify that C0 and DEL bytes are neutralized while newline and tab remain unchanged, the color path is unaffected, and legitimate non-ASCII input is handled according to the chosen behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- observability
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100