Skip to content

Parity: decode BMP headers from generated ExifTool tables - #15

Open
thedancingdeveloper wants to merge 1 commit into
mainfrom
parity/conformance-next
Open

Parity: decode BMP headers from generated ExifTool tables#15
thedancingdeveloper wants to merge 1 commit into
mainfrom
parity/conformance-next

Conversation

@thedancingdeveloper

@thedancingdeveloper thedancingdeveloper commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • replace the hand-written BMP field reader with the generated ExifTool BMP::Main and BMP::OS2 binary tables
  • reproduce ExifTool 13.30's BMP-specific conversions, conditions, and 68-byte AVI header hook
  • add focused tests for Windows V3, OS/2 V1, top-down height, FourCC compression, AVI layout, and rejected DIB lengths

Oracle and source

ExifTool 13.30 only:

  • lib/Image/ExifTool/BMP.pm: %Image::ExifTool::BMP::Main
  • lib/Image/ExifTool/BMP.pm: %Image::ExifTool::BMP::OS2
  • lib/Image/ExifTool/BMP.pm: ProcessBMP
  • corpus: all 190 files in t/images

Parity evidence

The full conformance classifier was run before at base 6fb64c5f246e8dde268c0597626a13ff3c2b9593 and after at 00f11751b545f92497d9bb60aa533c22f01434eb.

BMP matched rename value difference missing extra
before 10 0 1 5 5
after 16 0 0 0 0

Corpus totals moved from matched 5,670 / rename 11 / value difference 885 / missing 3,123 / extra 1,349 to matched 5,676 / rename 11 / value difference 884 / missing 3,118 / extra 1,344. A per-format JSON diff confirms BMP is the only changed format.

The focused incremental comparator was also run as required, but its ExifTool extractor intentionally filters the entire File family; BMP's real header tags are in that family, so it reports 0 ExifTool tags and cannot measure this slice. The conformance classifier does compare those tags and is the authoritative evidence above.

Validation

  • CARGO_BUILD_RUSTC_WRAPPER=sccache cargo test --lib parsers::image::bmp::tests -- --nocapture: 5 passed
  • bash scripts/verify_parity_fast.sh --skip-corpus: passed
  • CARGO_BUILD_RUSTC_WRAPPER=sccache cargo clippy --lib -- -D warnings: passed
  • cargo fmt --all -- --check: passed
  • git diff --check: passed
  • generated tables/generators were not changed, so regeneration was not required

No AI harness, fleet, model fixer, model reviewer, or external model/API command was run.

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.

1 participant