mux: FMTS read-plan on the inline live-drive path too (DiscStream::with_key_map)
The read_plan fix landed on the file-backed highway (build_iso_pipeline) but the inline DiscStream (live single-pass) still passed the alternate device-group half to the demux — a known FMTS bug on rip_mode="single". DiscStream::with_key_map installs the proactive map and rewrites the extent walk to the read plan, so the live single-pass path reads ONLY our-phase units, exactly like the highway. DecryptingSectorSource gains set_key_map for the already-constructed decorator. Non-forensic maps return the extents unchanged, so every non-FMTS disc is byte-identical. Test: with_key_map_reads_only_our_phase_units — a forensic Even segment drops exactly its alternate units from the extent walk. Precommit green on 1.86.
This commit is contained in:
@@ -175,6 +175,14 @@ impl<S: SectorSource> DecryptingSectorSource<S> {
|
||||
self
|
||||
}
|
||||
|
||||
/// `&mut` counterpart of [`with_key_map`](Self::with_key_map): install the
|
||||
/// proactive map on an already-constructed source (the inline live-drive
|
||||
/// [`DiscStream`](crate::mux::DiscStream) builds the decorator first, then
|
||||
/// installs the map via its own `with_key_map`).
|
||||
pub fn set_key_map(&mut self, map: Arc<crate::decrypt::AacsKeyMap>) {
|
||||
self.key_map = Some(map);
|
||||
}
|
||||
|
||||
/// Restrict decrypt to the disc's encrypted-content extents
|
||||
/// (sorted/merged `(start_lba, sector_count)` — see
|
||||
/// [`Disc::encrypted_content_ranges`](crate::Disc::encrypted_content_ranges)).
|
||||
|
||||
Reference in New Issue
Block a user