fix(format): measure compound members by their stored size
The compound overlap check measured each earlier member with Datatype::type_size, which is a fixed 16 for a variable-length type. On disk a VL member takes 4 + offset size + 4 bytes, 12 in a file with 4-byte offsets, so a member right after one was refused as "member overlaps with previous member" (and with the type, every attribute of the object). libhdf5 measures members by their decoded, stored size (times a v1 member's array dimensions); so does this now. Reading VL values in such files is a separate, older gap, now recorded in known-issues. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -321,6 +321,9 @@
|
||||
half its bits unused (`Datatype::parse_in_header`,
|
||||
`Datatype::check_unused_bits`). A v1/v2 float's class bit 6 was read as
|
||||
VAX byte order; libhdf5 ignores it before version 3, and so does this.
|
||||
The overlap check measures each earlier member by its stored size, as
|
||||
libhdf5 does, so a variable-length member (4 + offset size + 4 bytes)
|
||||
in a file with 4-byte offsets does not overlap the member after it.
|
||||
- chunked layouts (`FormatError::InvalidChunkDimensions`): a zero chunk
|
||||
dimension, a chunk rank that does not match the dataspace, a chunk of
|
||||
4 GiB or more indexed by a v1 B-tree (layout version 3 or earlier;
|
||||
|
||||
Reference in New Issue
Block a user