fix(format): decode the version-1 VDS mapping list HDF5 2.0 writes
With a 2.0 low version bound, libhdf5 stores the VDS mapping list as heap
block version 1: every entry starts with a flags byte (0x04 same file, no
file name; 0x01/0x02 file/dataset name shared with an earlier entry, whose
index is stored in place of the name). The parser treated only a leading
0x04 byte as special, so a 0x00 flags byte read as an empty (same-file)
name and shared names were read as garbage.
Decode it as H5D__virtual_load_layout does, refusing unknown flags,
forward references and block versions above 1.
Test: vds_interop::vds_mapping_block_version1_shared_names (h5py
libver=("v200","v200") with repeated long names; failed before with
"unknown dataspace selection type") plus the exact heap block as a unit
test.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -73,6 +73,8 @@ the VDS item, which is marked.
|
||||
- `%b` printf-style source names are not expanded.
|
||||
- ~~Hyperslab selection versions 1 and 2 are refused.~~ Fixed 2026-09-25:
|
||||
versions 1-3 and irregular hyperslabs are decoded.
|
||||
- ~~The version-1 mapping list written with a 2.0 low bound (flags byte,
|
||||
shared names) was misparsed.~~ Found and fixed 2026-09-25.
|
||||
- **Files with a user block:** the base address is not applied.
|
||||
- **Old-style shared messages (version 1)** read the wrong address.
|
||||
- **Groups and links:**
|
||||
|
||||
Reference in New Issue
Block a user