ChunkCache::chunks_for returned the chunk index's values in hash-map order, which differs between File instances (a new HashMap per open). Readers that stop at the first failing chunk therefore named different chunks on different opens of the same damaged file: whole-dataset selections here, and the indexed reader behind the storage harness's intermittent cve-2025-2310.h5 failure. The cache now also keeps the chunks in the order the index lists them (fetched or built under one lock) and returns that order, as the uncached readers use. Regression: several_damaged_chunks_report_the_same_chunk_every_time (four chunks inflating to different short lengths; before the fix two opens reported chunk [40, 0] and chunk [320, 0]). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
clawhdf5-format
Pure-Rust HDF5 binary format parsing and writing — no C dependencies.
Features
- Zero-copy superblock, object header, and B-tree parsing
- Chunked dataset read/write with filter pipelines
no_stdsupport (disablestdfeature)- Optional parallel reads via Rayon
- SHA-256 provenance tracking
Usage
use clawhdf5_format::Superblock;
let data = std::fs::read("data.h5").unwrap();
let sb = Superblock::from_bytes(&data).unwrap();
println!("HDF5 version {}.{}", sb.version_major(), sb.version_minor());
License
MIT