The readers added this cycle parse untrusted bytes, so malformed/hostile input must produce errors — never a panic, OOM, or unbounded recursion. Audited each new surface and fixed the concrete vectors, each covered by an adversarial regression test: - Paged Fixed Array: `1 << max_nelmts_bits` shift overflow (u8 up to 255); element-count bounded by file size; element/page offset multiplies checked. - H5S selection decoder: ALL/NONE validate they have the 16 bytes they claim to consume; hyperslab rank capped at 32 (H5S_MAX_RANK); iter_linear coordinate/stride/product arithmetic uses checked ops. - VDS mapping parser: drop pre-allocation from the untrusted `nused`; bounds-check all selection slicing. - scale-offset / N-Bit filters: `1 << minbits` overflow at minbits==64; N-Bit `bit_offset + precision` overflow; N-Bit type-tree recursion depth capped to stop a crafted nested tree from overflowing the stack; element counts bounded by the chunk's expected decompressed size (threaded the previously-unused chunk_size into both decoders) so a bogus count can't over-allocate. - VDS assembly: a virtual dataset whose source is itself virtual (a cycle) now errors instead of recursing into a stack overflow. 16 new adversarial tests; full format suite (482 lib) + agent + facade green; clippy clean. Co-Authored-By: Claude Opus 4.8 <[email protected]>
6.0 KiB
6.0 KiB