fix(deps): widen ewf 0.2 -> 0.4, caret-trapped below the maintained line - #8
Draft
h4x0r wants to merge 1 commit into
Draft
fix(deps): widen ewf 0.2 -> 0.4, caret-trapped below the maintained line#8h4x0r wants to merge 1 commit into
h4x0r wants to merge 1 commit into
Conversation
`ewf = { version = "0.2", optional = true }` cannot reach 0.4.x. `cargo update`
will not cross a caret, so the pin has sat at 0.2.3 while the crate moved to
0.4.7 (published 2026-07-25) — the layer-1 freshness trap, invisible to both
`cargo update` and Renovate's default rangeStrategy.
`ewf` is not a spare wheel here. `forensic-image` is a DEFAULT feature and it
gates `dep:ewf`, so every stock build ships this code path:
src/forensic_image/ewf_backend.rs:2 use ewf::EwfReader;
src/forensic_image/mod.rs:261 ImageFormat::Ewf => ewf_backend::verify_ewf(path)
0.2 -> 0.4 crosses two 0.x minors, which are breaking by convention, so this was
checked rather than assumed. The surface actually consumed is `EwfReader::open`,
`total_size`, `stored_hashes`, `metadata`, and `verify` plus the fields of what
those return. All of it still compiles, and — the part that matters — still
produces the same answers on a real image:
test tests::verify_ewf_image_passes ... ok
test tests::verify_ewf_image_returns_stored_hashes ... ok
test tests::verify_ewf_image_returns_metadata ... ok
test tests::detect_ewf_format ... ok
test tests::cli_verify_image_e01 ... ok
test result: ok. 19 passed; 0 failed; 0 ignored
Those are not compile-only. `tests/data/nps-2010-emails.E01` is a real 518,680-byte
EWF image from the NPS corpus; the test decompresses it, computes MD5 and SHA-1
over the media, and compares against the hashes the original 2010 acquisition
tool stored inside the file. The expected values were authored by a third party,
not by us, so a silent behavioural regression in 0.4's reader or verifier would
surface as a mismatch rather than a passing tautology.
The dependency graph gets smaller, not larger. One in, five out:
ADDED : ewf 0.4.7
REMOVED: ewf 0.2.3, instant 0.1.13, parking_lot 0.11.2,
parking_lot_core 0.8.6, redox_syscall 0.2.16, socket2 0.5.10
Worth correcting one thing about the unpushed commit 41e1090, which does the same
widening and was used only as a starting point to verify: its lock diff shows
`adler2` being ADDED to ewf's dependencies. That is not true against a re-synced
lock — `adler2` is already present from the earlier adler->adler2 migration, so
the real delta is a net removal of five packages.
`[[trusted.ewf]]` already covers 0.4.7: the trust is bound to the publisher and a
date window, not to a version, and 0.4.7 was published inside it. cargo-vet
refreshed the `imports.lock` publisher record from 0.2.3 to 0.4.7 by itself.
Vetting Succeeded (169 fully audited, 5 partially audited, 624 exempted)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Contributor
Author
|
CI does not run on this PR, and that is not the same as CI passing.
The gates were run locally instead, on this exact branch:
Retargeting this PR to |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ewf = { version = "0.2", optional = true }cannot reach 0.4.x.cargo updatewill not cross a caret, so the pin has sat at 0.2.3 while the crate moved to 0.4.7 (published 2026-07-25). This is the layer-1 freshness trap — invisible tocargo updateand to Renovate's defaultrangeStrategy.This is a live code path, not a spare wheel
forensic-imageis a default feature and it gatesdep:ewf, so every stock build ships this:0.2 -> 0.4 crosses two 0.x minors — checked, not assumed
0.x minors are breaking by convention, so a version bump alone would not be evidence of anything. The surface actually consumed is
EwfReader::open,total_size(),stored_hashes(),metadata(),verify(), plus the fields of what those return.All of it compiles. More importantly, it still produces the same answers on a real image:
These are not compile-only, and they are not skipped. I checked specifically, because a fixture-gated suite that silently skips would have made "it compiles" the entire strength of the claim.
tests/data/nps-2010-emails.E01is present — a real 518,680-byte EWF image from the NPS corpus. The test decompresses it, computes MD5 and SHA-1 over the media, and compares against the hashes the original 2010 acquisition tool wrote inside the file. The expected values were authored by a third party years before this code existed, so a silent behavioural regression in 0.4's reader or verifier surfaces as a mismatch rather than as a passing tautology.The graph gets smaller
One in, five out:
instantandparking_lot0.11 are both long superseded, so this drops old surface rather than adding new.One correction to the unpushed commit
41e1090That commit does the same widening and was used only as a starting point to verify, not as a change to trust. Its lock diff shows
adler2being added toewf's dependencies. That is not true against a re-synced lock —adler2is already present from the earlieradler->adler2migration. The real delta is a net removal of five packages, not an addition.Supply chain
[[trusted.ewf]]from #5 already covers 0.4.7: the trust binds to the publisher and a date window, not to a version, and 0.4.7 was published inside it. cargo-vet refreshed theimports.lockpublisher record from 0.2.3 to 0.4.7 on its own.Gates
cargo buildcargo testcargo clippy --all-targets -- -D warningscargo fmt --checkcargo vetcargo deny checkwasmtime25.0.3 viayara-x0.9.0) — pre-existing onmain, unrelated, detailed in #5Note the exemption count drifts 628 -> 624 as four more entries go inert with
instantand theparking_lotpair leaving. #7 prunes orphaned exemptions; if it lands after this, it will sweep those too.🤖 Generated with Claude Code