This commit implements the Cargo.lock policy for reproducible builds across all workspace members (pdftract-core, pdftract-cli, pdftract-py). Changes: - Add CONTRIBUTING.md with lockfile-update workflow documentation - Add .renovaterc.json for weekly lockfile-only PRs (human-gated) - Add crates/pdftract-core/README.md with rationale for checked-in lockfiles - Add notes/pdftract-49f8.md with verification note The Argo workflow updates (pdftract-ci.yaml) are committed separately in the declarative-config repo. Acceptance criteria: - PASS: Cargo.lock tracked by git, not in .gitignore - PASS: Argo workflow templates document --locked/--frozen requirements - WARN: Enforcement to be completed when placeholder templates are implemented - WARN: Binary reproducibility verification deferred to pdftract-build-binaries implementation Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
36 lines
1.2 KiB
Rust
36 lines
1.2 KiB
Rust
//! Fuzz target for the PDF CMap parser.
|
|
//!
|
|
//! This target tests INV-8 (no panic at public boundary) for the CMap parser.
|
|
//! Any panic indicates a CMap parser bug that must be fixed.
|
|
//!
|
|
//! Note: Full CMap parser is not yet implemented. This target tests the
|
|
//! lexer's name and string handling which are foundational to CMap parsing.
|
|
|
|
#![no_main]
|
|
use libfuzzer_sys::fuzz_target;
|
|
|
|
fuzz_target!(|data: &[u8]| {
|
|
use pdftract_core::parser::lexer::Lexer;
|
|
|
|
// CMap parsing relies heavily on name and string parsing
|
|
// Test that the lexer handles these correctly without panic
|
|
let mut lexer = Lexer::new(data);
|
|
|
|
loop {
|
|
match lexer.next_token() {
|
|
Some(token) => {
|
|
// CMap uses many names and strings
|
|
match token {
|
|
pdftract_core::parser::lexer::Token::Name(_) => {
|
|
// Name parsing succeeded
|
|
}
|
|
pdftract_core::parser::lexer::Token::String(_) => {
|
|
// String parsing succeeded
|
|
}
|
|
_ => {}
|
|
}
|
|
}
|
|
None => break,
|
|
}
|
|
}
|
|
});
|