fix(format): refuse a chunk layout whose element size is not the datatype's
A chunked layout records the element size as its last dimension, and libhdf5 refuses a dataset whose datatype has another size (H5D__chunk_set_sizes: "stored datatype size in chunk layout does not match datatype description"). clawhdf5 ignored the recorded size and read the chunks anyway, for v3 and v4 layouts. The check runs on every chunked read (read_chunked_data*, read_raw_data_selection) and compares against the stored size: a variable-length element is 4 + offset size + 4 bytes, not Datatype::type_size's 16. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -211,8 +211,9 @@ pub enum FormatError {
|
||||
/// an empty enum name, a compound member outside its compound, …
|
||||
InvalidDatatype(String),
|
||||
/// A chunked layout whose chunk dimensions libhdf5 refuses: a zero
|
||||
/// dimension, a rank that does not match the dataspace, or a chunk of
|
||||
/// 4 GiB or more indexed by a version-1 B-tree.
|
||||
/// dimension, a rank that does not match the dataspace, an element size
|
||||
/// that is not the datatype's, or a chunk of 4 GiB or more indexed by a
|
||||
/// version-1 B-tree.
|
||||
InvalidChunkDimensions(String),
|
||||
/// The superblock's end-of-file address lies past the end of the file:
|
||||
/// the file was truncated (libhdf5 refuses to open it).
|
||||
|
||||
Reference in New Issue
Block a user