fix(format): resolve SOHM-shared messages on every path
A message shared through the file's SOHM heap (H5Pset_shared_mesg_index) is referenced by heap ID, which needs the SOHM table from the superblock extension. Only message_data_with_sohm (used for fill values) loaded it; resolve_shared_message passed no table, so a SOHM-shared datatype, dataspace, filter pipeline or attribute failed with "invalid shared message version: 2" and the dataset or attribute could not be read. resolve_shared_message now loads the table when the reference carries a heap ID. Found while making attrs() tolerant: SOHM attributes turned from an error into missing keys in the audit read matrix. With this fix all 36 SOHM cases there match h5py (datasets, fill values and attributes, every shareable message type, libver earliest and latest). Regression test: sohm_shared_messages_resolve (h5py writes files sharing each message type on its own and all of them; values and attributes checked). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -345,6 +345,13 @@
|
||||
header or B-tree) still fails the call. `clawhdf5-format` gains
|
||||
`attribute::extract_attributes_tolerant`; `extract_attributes_full` stays
|
||||
strict.
|
||||
- `clawhdf5-format` reader — files with shared object header messages
|
||||
(SOHM, `H5Pset_shared_mesg_index`): a datatype, dataspace, filter pipeline
|
||||
or attribute stored in the file's SOHM heap failed with "invalid shared
|
||||
message version: 2" — only shared fill values loaded the SOHM table — so
|
||||
such files' datasets and attributes could not be read.
|
||||
`shared_message::resolve_shared_message` now loads the table when a
|
||||
reference needs it (36 cases of the audit's read matrix).
|
||||
- `clawhdf5-format` writer — **files libhdf5 rejects or reads wrong:**
|
||||
- Extensible Array (one unlimited dimension): chunks from index 244 on were
|
||||
written but never indexed and read as 0, by libhdf5 and by us.
|
||||
|
||||
Reference in New Issue
Block a user