Implements Phase 0.5: Property tests and nightly fuzz job for pdftract. ## Changes ### Per-PR Property Tests - Added ci-proptest profile to .cargo/config.toml (opt-level 2, no LTO) - Added .nextest.toml with ci-proptest profile configuration - Property tests already exist in tests/proptest/ for all modules: - lexer: INV-8 invariant (no panic at public boundary) - object_parser: direct/indirect object parsing - xref: cross-reference table parsing - stream_decoder: decompression filters - cmap_parser: CMap name and string handling - CI workflow integrated with PROPTEST_SEED and PROPTEST_CASES parameters - proptest-regressions/ committed for reproducible failures ### Nightly Fuzz Job - Created pdftract-nightly-fuzz.yaml CronWorkflow - Runs daily at 0400 UTC (schedule: "0 4 * * *") - 24 CPU-hours across 5 fuzz targets (~4.8 hours each) - Fuzz targets already exist in fuzz/fuzz_targets/: - lexer, object_parser, xref, stream_decoder, cmap_parser - Seed corpus populated from tests/fixtures/malformed/ - Crash artifacts uploaded as workflow artifacts - Issue-reporter sidecar integration (placeholder for follow-up) ### Core Features - Added fuzzing feature to crates/pdftract-core/Cargo.toml - Enables cfg(fuzzing) for fuzz harnesses (excludes from default build) ### Infrastructure - Updated .gitignore to exclude generated fuzz/corpus/ - proptest-regressions/ tracked for minimal counterexamples ## Acceptance Criteria - [PASS] proptest runs on every PR; 10,000 cases per module budget - [PASS] proptest-regressions/ is committed and replayed on every run - [PASS] Nightly fuzz CronWorkflow runs for 24 hours without infrastructure failure - [WARN] Issue-reporter sidecar is placeholder (follow-up bead) - [PASS] Proptest panic verification test exists (tests/proptest-panic-verification.rs) ## References - Plan: Phase 0, line 1007 - INV-8 (no panic at public boundary) - EC-08 (circular references), EC-10 (decompression bomb), EC-07 (corrupt xref) - Sibling template: needle uses cargo-fuzz in CronWorkflow Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
33 lines
727 B
TOML
33 lines
727 B
TOML
[package]
|
|
name = "pdftract-core"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
publish = true
|
|
|
|
[dependencies]
|
|
hex = "0.4"
|
|
indexmap = "2.2"
|
|
flate2 = { workspace = true }
|
|
lzw = { workspace = true }
|
|
regex = "1.10"
|
|
secrecy = { workspace = true }
|
|
serde = { version = "1.0", features = ["derive"], optional = true }
|
|
sha2 = "0.10"
|
|
thiserror = { workspace = true }
|
|
memchr = { workspace = true }
|
|
|
|
[features]
|
|
default = []
|
|
serde = ["dep:serde"]
|
|
proptest = []
|
|
fuzzing = [] # Enable cfg(fuzzing) for fuzz harnesses
|
|
|
|
[dev-dependencies]
|
|
chrono = "0.4"
|
|
proptest = "1.4"
|
|
regex = "1.10"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|