Skip to content

Detect binary content beyond the first line - #3877

Draft
Matei02355 wants to merge 2 commits into
sharkdp:masterfrom
Matei02355:fix-binary-detection-across-lines-3554
Draft

Detect binary content beyond the first line#3877
Matei02355 wants to merge 2 commits into
sharkdp:masterfrom
Matei02355:fix-binary-detection-across-lines-3554

Conversation

@Matei02355

Copy link
Copy Markdown
Contributor

Summary

  • inspect up to the first 1024 already-buffered bytes before splitting out the first line
  • preserve the reader's bytes, line boundaries, UTF-16 handling, and streaming behavior
  • add regressions for cross-line binary detection, the 1024-byte boundary, single-read/EOF inputs, and the CLI binary header

Fixes #3554.

Root cause

content_inspector checks up to 1024 bytes for a NUL byte, but bat passed only the first line. Random or encrypted data can contain a newline before its first NUL byte, so the shortened sample was classified as UTF-8 and binary bytes were sent to the terminal.

The fix snapshots the already-buffered prefix with BufRead::fill_buf() before read_until splits out the first line. The snapshot is non-consuming, so no bytes are lost or reordered, and it does not add a post-line blocking read. Empty input is handled without requesting a second EOF event.

Compatibility

BOM detection still takes precedence, so UTF-16 input handling is unchanged. ZIP signature detection is also unchanged.

PR #3763 changes the same input initialization path for a distinct issue (#2262: bounding reads for newline-free binary files). If it merges first, this PR will need a small rebase, but the behaviors are complementary.

Validation

  • cargo test --all-targets --all-features — clean run: 455 passed, 5 ignored
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo fmt --check
  • git diff --check

@keith-hall keith-hall left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, looks good

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

encrypted file not recognized as binary

2 participants