docs: changelog and known issues for the header hardening
CHANGELOG (Correctness): the new header, datatype, chunk and truncation checks, what is left out on purpose (checks HDF5 2.0 lacks; the two v2.7.0 writer quirks), the conformance numbers and the new FormatError variants. known-issues: the "Header checks" audit gap is fixed, with the one CVE object and two CVE files libhdf5 still refuses and we read. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
+24
-2
@@ -134,8 +134,30 @@ fill-value item that did is fixed).
|
||||
- N-Bit on 64-bit scale-offset data and some N-Bit parameter layouts fail.
|
||||
- **Filters:** blosc, blosc2, bitshuffle, bzip2, LZF and zfp are not
|
||||
implemented.
|
||||
- **Header checks:** on 12 CVE datasets libhdf5 rejects a corrupt header and
|
||||
we read data anyway. We need stricter header checks.
|
||||
- ~~**Header checks:** on 12 CVE datasets libhdf5 rejects a corrupt header and
|
||||
we read data anyway. We need stricter header checks.~~ **Fixed
|
||||
2026-09-26** (counted again: 18 objects on the CVE corpus that libhdf5
|
||||
refuses; some read as wrong data, e.g. a zero chunk dimension read as all
|
||||
fill values): object headers, datatypes, chunk dimensions and chunk-index
|
||||
offsets are checked as libhdf5 checks them, and truncated files are
|
||||
refused. 17 of the 18 now
|
||||
fail as in libhdf5 (conformance on tank, `conformance/run.sh --no-fetch`,
|
||||
2026-09-26: 571 of 697 ok). Still read where libhdf5 refuses:
|
||||
- `cve-2024-32624.h5` `/Dset_OBJREF`: a dataspace whose storage size
|
||||
overflows 64 bits. `File::dataset` and `shape()` succeed (libhdf5
|
||||
refuses at open); reading the values fails.
|
||||
- `cve-2020-10810.h5`, `cve-2020-10812.h5` (whole files libhdf5 cannot
|
||||
open, not among the 18): libhdf5 decodes the superblock extension's File
|
||||
Space Info and metadata-cache-image messages at open and refuses these
|
||||
files; we do not decode those messages at open.
|
||||
- Deliberately not refused, because clawhdf5 up to v2.7.0 wrote them: a
|
||||
float sign bit position outside the type, and a size-0 string type.
|
||||
- Not refused because HDF5 2.0 (h5py 3.16) reads them though newer
|
||||
libhdf5 refuses them: bit-field offset/precision outside the type, an
|
||||
unknown variable-length kind, an array type whose stored size is not
|
||||
its element count times its base size.
|
||||
- (`cve-2024-32616` `/group1/dset3` and `cve-2025-2309`'s `Comp_OBJREF`
|
||||
attribute are h5py/numpy type-mapping failures, not libhdf5 refusals.)
|
||||
- **Writer:**
|
||||
- Nested groups beyond one level: path-like names are now refused, not
|
||||
created.
|
||||
|
||||
Reference in New Issue
Block a user