Security - Remove the unsafe Vec::set_len over recycled sector buffers — UB reachable from safe code (GHSA-j8ww-f5fg-9pmh, low). Uses Vec::resize; pooling unchanged. CI / tooling - clippy on stable with the MSRV single-sourced from Cargo.toml; cargo-deny dependency-audit gate with first-party git sources allowed (#15); audience-based comment-guard (#17). Docs - README (keydb ownership, BD-J parser count), drive-access transport/reset notes, mux timeline module-doc links.
1.2 KiB
unlock_bridge
Bridges libfreemkv's drive layer to the freemkv-unlock crate: one generic
SCSI-transport adapter, identity/host-cert mapping, and the dispatch that
news up all_unlockers() and runs the first matching one. libfreemkv names
no individual unlocker — it only calls this bridge.
Dispatch
Result of a capability dispatch: (matched_name, result). matched_name is
the unlocker that handled it (or "" if none did) — lets the caller record
WHICH unlocker ran (e.g. MT1959 vs Renesas), distinct from the id-only
identity lookup unlocker_name. Iterating stops at the first unlocker whose
capability method returns anything other than NotApplicable — i.e. an actual
unlock (Ok) OR a real failure such as a dead bus (Err(Transport)), which
the caller must surface rather than skip.
unlocker_names
The names of every REGISTERED unlocker, in dispatch order. Registry-driven —
sourced from all_unlockers(), so adding/removing an unlocker updates every
report with no other change (no hardcoded names). The per-unlocker "did it
run this rip" outcome is computed by the caller, which has the disc + drive
runtime state this crate cannot see.