Files
clawhdf5/CONFORMANCE.md
T
osobhandClaude Opus 5.5 5c2f656fe7
CI / test-arm64 (pull_request) Successful in 1m6s
CI / test (pull_request) Successful in 5m0s
docs: first conformance report and baseline (42b81d9, tank)
467 of 697 files read identically to h5py 3.16 / HDF5 2.0, 123 our-error,
15 mismatch (2 an h5py big-endian VL bug), 92 libhdf5 cannot read; no
panics, hangs, crashes or OOM.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-25 22:06:00 -05:00

23 KiB

clawhdf5 conformance report

Every HDF5 file of eight public corpora (pinned by commit) is read twice — by clawhdf5 (conformance/probe, the same clawhdf5-format calls the facade makes) and by h5py/libhdf5 (conformance/ref.py) — and the two readings are compared object by object: the set of hard-linked objects, each dataset's and attribute's shape, and a SHA-256 of its values in a canonical encoding. The CVE corpus is also run through h5dump. Each side runs under a timeout and an address-space limit, so a hang, crash or runaway allocation is recorded, not fatal. This file is generated by conformance/run.sh; do not edit it by hand.

Run

date 2026-09-26 03:05 UTC
clawhdf5 commit 42b81d9f1c3d9bef6050ad8a1326ac8c97f641d3
machine tank: AMD Ryzen 7 7800X3D 8-Core Processor, 16 CPUs, 61 GiB, Linux 7.0.0-34-generic x86_64
command conformance/run.sh --update-baseline
rustc rustc 1.98.1 (48a229cea 2026-09-01)
reference h5py 3.16.0, HDF5 2.0.0, numpy 2.5.3, hdf5plugin 7.1.0, Python 3.14.4
h5dump Version 1.14.6 (CVE corpus only)
limits 20 s timeout (SIGKILL), 4096 MiB address space, per process; 16 files in parallel
runtime 25 s probing + comparing (0 s fetch/build before it)

Results

A file's class is the first that applies:

  • panic / hang / crash / oom — clawhdf5 panicked (caught per object or not), hit the timeout, died on a signal, or failed an allocation. The CI gate fails on any of these.
  • h5py-cannot-read — libhdf5 could not open the file (or itself crashed or hung). Nothing to compare against; most are the deliberately malformed CVE reproducers.
  • our-error — clawhdf5 returned an error for something h5py reads.
  • mismatch — both read it, but the shapes, values, object set or attribute set differ.
  • ok — every object h5py reads, clawhdf5 reads identically.
corpus files ok our-error mismatch h5py-cannot-read panic hang crash oom
NCAS-CMS_pyfive 33 31 1 1 0 0 0 0 0
cve_hdf5 147 87 17 11 32 0 0 0 0
h5py_data 4 4 0 0 0 0 0 0 0
hdf5 466 300 103 3 60 0 0 0 0
netcdf-c 20 20 0 0 0 0 0 0 0
netcdf4-python 18 16 2 0 0 0 0 0 0
usnistgov_h5wasm 5 5 0 0 0 0 0 0 0
xarray-data 4 4 0 0 0 0 0 0 0
all 697 467 123 15 92 0 0 0 0

2 of the 15 mismatches are a known h5py bug, not ours (see Known not-our-bug).

Corpora (fetched by conformance/fetch-corpus.sh into the gitignored conformance/.cache/):

corpus source commit
hdf5 https://github.com/HDFGroup/hdf5 a3cf1ea82cc7
cve_hdf5 https://github.com/HDFGroup/cve_hdf5 3fd1f5ae3869
netcdf-c https://github.com/Unidata/netcdf-c beb7b9585273
NCAS-CMS_pyfive https://github.com/NCAS-CMS/pyfive 8cf07b874913
usnistgov_h5wasm https://github.com/usnistgov/h5wasm 02f6336527d2
netcdf4-python https://github.com/Unidata/netcdf4-python 6e67576d39ae
xarray-data https://github.com/pydata/xarray-data a35297e9da2c
h5py_data https://github.com/h5py/h5py (h5py/tests/data_files) b2f0347c4200

Panics, hangs, crashes, out-of-memory

None.

Our-error root causes

Grouped by normalised error message. files counts files whose class this cause affects.

files objects error examples
84 205 InvalidLayoutVersion(N) cve_hdf5/cvefiles/cve-2016-4330.h5, cve_hdf5/cvefiles/cve-2016-4333.h5, cve_hdf5/cvefiles/cve-2018-11206-old.h5 (+81 more)
10 10 ChunkedReadError("…") cve_hdf5/cvefiles/cve-2025-2308.h5, hdf5/test/testfiles/bad_nbit_parms_walk.h5, hdf5/tools/test/testfiles/vds/1_vds.h5 (+7 more)
9 17 InvalidObjectHeaderVersion(N) cve_hdf5/cvefiles/cve-2021-36977.h5, cve_hdf5/cvefiles/unknown-1.h5, hdf5/tools/test/testfiles/h5clear_fsm_persist_user_equal.h5 (+6 more)
6 6 UnsupportedFilter(N) hdf5/HDF5Examples/C/H5FLT/tfiles/h5ex_d_blosc.h5, hdf5/HDF5Examples/C/H5FLT/tfiles/h5ex_d_blosc2.h5, hdf5/HDF5Examples/C/H5FLT/tfiles/h5ex_d_bshuf.h5 (+3 more)
6 6 InvalidLinkType(N) hdf5/tools/test/testfiles/bigendian/tall.h5, hdf5/tools/test/testfiles/h5diff_types.h5, hdf5/tools/test/testfiles/tall.h5 (+3 more)
5 5 UnexpectedEof { expected: N, available: N } NCAS-CMS_pyfive/tests/data/cmip_bad_eg.nc, cve_hdf5/cvefiles/cve-2019-9151.h5, hdf5/tools/test/testfiles/h5stat_newgrat.h5 (+2 more)
3 3 DataSizeMismatch { expected: N, actual: N } cve_hdf5/cvefiles/cve-2020-18494.h5, cve_hdf5/cvefiles/cve-2024-32623.h5, cve_hdf5/cvefiles/cve-2025-2309.h5
1 1 MissingMessage(Dataspace) cve_hdf5/cvefiles/cve-2024-33874.h5
1 2 InvalidSharedMessageVersion(N) hdf5/tools/test/testfiles/h5stat_tsohm.h5

Mismatch root causes

files objects cause examples
9 27 missing-object cve_hdf5/cvefiles/cve-2019-8397.h5, cve_hdf5/cvefiles/cve-2019-8398.h5, cve_hdf5/cvefiles/cve-2021-46243.h5 (+6 more)
5 11 extra-object cve_hdf5/cvefiles/cve-2021-46244.h5, cve_hdf5/cvefiles/cve-2024-32613.h5, cve_hdf5/cvefiles/cve-2024-32616.h5 (+2 more)
3 7 extra-attr cve_hdf5/cvefiles/cve-2018-17438, cve_hdf5/cvefiles/cve-2018-17439, cve_hdf5/cvefiles/cve-2024-33874.h5
2 4 missing-attr hdf5/tools/test/testfiles/twithub.h5, hdf5/tools/test/testfiles/twithub513.h5
1 1 attr-values: ours=vlen(>u8) h5py=object layout=- filters=- NCAS-CMS_pyfive/tests/data/attr_datatypes.hdf5
1 1 values: ours=<f4 h5py=float32 layout=chunked filters=- cve_hdf5/cvefiles/cve-2025-44904.h5
1 1 values: ours=>i2 h5py=>i2 layout=chunked filters=[6] cve_hdf5/cvefiles/cve-2025-44905.h5
1 1 values: ours=>f4 h5py=>f4 layout=chunked filters=[2] cve_hdf5/cvefiles/cve-2025-44905.h5
1 1 values: ours=<f4 h5py=float32 layout=chunked filters=[2] cve_hdf5/cvefiles/cve-2025-44905.h5
1 1 values: ours=vlen({r:>f4,i:>f4}8) h5py=object layout=contiguous filters=- hdf5/tools/test/testfiles/tcomplex_be.h5

CVE corpus: clawhdf5 vs h5dump vs h5py

The 147 files of HDFGroup/cve_hdf5 — reproducers for published libhdf5 CVEs and fuzzer finds. read = produced output (possibly with per-object errors), error = refused cleanly. h5dump exits non-zero on any error anywhere in a file, so its read/error split is not comparable with the other two rows; the panic, crash, hang and oom columns are.

tool read error panic crash hang oom
clawhdf5 142 5 0 0 0 0
h5dump 1.14.6 16 129 0 2 0 0
h5py 3.16.0 / HDF5 2.0.0 115 31 0 1 0 0
Per-file outcomes
file h5dump h5py clawhdf5 class
cvefiles/cve-2016-4330.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2016-4331.h5 error exit read 25 obj, 1 errors read 25 obj, 1 errors ok
cvefiles/cve-2016-4332-mtime-new.h5 error exit read 25 obj, 1 errors read 25 obj ok
cvefiles/cve-2016-4332-mtime.h5 error exit read 4 obj, 3 errors read 4 obj, 1 errors ok
cvefiles/cve-2016-4332-stab.h5 error exit open error read 65 obj h5py-cannot-read
cvefiles/cve-2016-4333.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2017-17505.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2017-17506.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2017-17507.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2017-17508.h5 error exit read 2 obj, 1 errors read 2 obj ok
cvefiles/cve-2017-17509.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-11202.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-11203.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-11204.h5 error exit read 2 obj, 1 errors read 2 obj ok
cvefiles/cve-2018-11205.h5 error exit read 2 obj, 1 errors read 2 obj ok
cvefiles/cve-2018-11206-new.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-11206-old.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2018-11207.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-13866.h5 error exit open error open error h5py-cannot-read
cvefiles/cve-2018-13867.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2018-13868.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2018-13869.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2018-13870.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2018-13871.h5 error exit read 2 obj read 2 obj ok
cvefiles/cve-2018-13872.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2018-13873.h5 error exit read 1 obj, 1 errors read 1 obj ok
cvefiles/cve-2018-13874.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2018-13875.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2018-13876.h5 error exit open error read 2 obj, 1 errors h5py-cannot-read
cvefiles/cve-2018-14031.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2018-14033.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-14034.h5 error exit read 1 obj, 2 errors read 1 obj ok
cvefiles/cve-2018-14035.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2018-14460.h5 error exit read 3 obj, 2 errors read 3 obj, 2 errors ok
cvefiles/cve-2018-15671.h5 ok read 1 obj read 1 obj ok
cvefiles/cve-2018-15672.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-16438.h5 error exit read 1 obj, 1 errors read 1 obj ok
cvefiles/cve-2018-17233.h5 error exit read 6 obj, 1 errors read 6 obj, 1 errors ok
cvefiles/cve-2018-17234.h5 error exit read 6 obj, 1 errors read 6 obj, 1 errors ok
cvefiles/cve-2018-17237.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2018-17432.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-17433 error exit open error open error h5py-cannot-read
cvefiles/cve-2018-17434.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-17435.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-17436 error exit open error open error h5py-cannot-read
cvefiles/cve-2018-17437.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2018-17438 error exit read 3 obj, 1 errors read 3 obj, 1 errors mismatch
cvefiles/cve-2018-17439 error exit read 3 obj, 1 errors read 3 obj, 1 errors mismatch
cvefiles/cve-2019-8396.h5 error exit read 3 obj, 2 errors read 3 obj, 2 errors ok
cvefiles/cve-2019-8397.h5 error exit read 3 obj, 2 errors read 2 obj, 1 errors mismatch
cvefiles/cve-2019-8398.h5 error exit read 3 obj, 2 errors read 2 obj, 1 errors mismatch
cvefiles/cve-2019-9151.h5 error exit read 3 obj, 1 errors read 3 obj, 2 errors our-error
cvefiles/cve-2019-9152.h5 error exit read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2020-10809 error exit open error open error h5py-cannot-read
cvefiles/cve-2020-10810.h5 error exit open error read 2 obj h5py-cannot-read
cvefiles/cve-2020-10811.h5 error exit read 25 obj, 1 errors read 25 obj, 1 errors ok
cvefiles/cve-2020-10812.h5 error exit open error read 2 obj h5py-cannot-read
cvefiles/cve-2020-18232.h5 error exit read 3 obj, 2 errors read 3 obj, 2 errors ok
cvefiles/cve-2020-18494.h5 ok read 2 obj read 2 obj, 1 errors our-error
cvefiles/cve-2021-36977.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors our-error
cvefiles/cve-2021-37501.h5 error exit read 18 obj, 1 errors read 18 obj, 1 errors ok
cvefiles/cve-2021-45829.h5 error exit read 1 obj, 2 errors read 1 obj, 1 errors ok
cvefiles/cve-2021-45830.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2021-45833.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2021-46242.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2021-46243.h5 error exit read 3 obj, 2 errors read 2 obj, 1 errors mismatch
cvefiles/cve-2021-46244.h5 error exit read 2 obj, 1 errors read 6 obj, 3 errors mismatch
cvefiles/cve-2024-29157.h5 error exit read 4 obj, 7 errors read 4 obj, 7 errors ok
cvefiles/cve-2024-29158.h5 ok read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2024-29159.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2024-29160.h5 error exit read 4 obj, 1 errors read 4 obj, 1 errors ok
cvefiles/cve-2024-29161.h5 error exit read 1 obj, 1 errors read 1 obj, 2 errors ok
cvefiles/cve-2024-29162.h5 error exit read 17 obj, 4 errors read 17 obj, 3 errors ok
cvefiles/cve-2024-29163.h5 error exit read 7 obj, 1 errors read 7 obj, 1 errors ok
cvefiles/cve-2024-29164.h5 ok read 3 obj read 3 obj, 2 errors our-error
cvefiles/cve-2024-29165.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2024-29166.h5 error exit read 17 obj, 2 errors read 17 obj ok
cvefiles/cve-2024-32605.h5 ok read 6 obj, 1 errors read 6 obj, 1 errors ok
cvefiles/cve-2024-32606.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2024-32607-1.h5 ok read 10 obj read 10 obj ok
cvefiles/cve-2024-32607-2.h5 error exit read 9 obj, 1 errors read 9 obj, 1 errors ok
cvefiles/cve-2024-32608.h5 error exit read 6 obj, 1 errors read 6 obj ok
cvefiles/cve-2024-32609.h5 error exit SIGSEGV read 4 obj, 1 errors h5py-cannot-read
cvefiles/cve-2024-32610.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/cve-2024-32611.h5 ok read 6 obj read 6 obj ok
cvefiles/cve-2024-32612.h5 ok read 3 obj read 3 obj, 2 errors our-error
cvefiles/cve-2024-32613.h5 error exit read 7 obj, 1 errors read 11 obj mismatch
cvefiles/cve-2024-32614.h5 error exit read 25 obj, 2 errors read 25 obj, 1 errors ok
cvefiles/cve-2024-32615.h5 error exit read 4 obj, 1 errors read 4 obj, 1 errors ok
cvefiles/cve-2024-32616.h5 error exit read 10 obj, 7 errors read 11 obj, 6 errors mismatch
cvefiles/cve-2024-32617.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2024-32618.h5 error exit read 4 obj, 2 errors read 3 obj mismatch
cvefiles/cve-2024-32619.h5 error exit read 3 obj, 2 errors read 3 obj ok
cvefiles/cve-2024-32620.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2024-32621.h5 ok read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2024-32622.h5 ok read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2024-32623.h5 ok read 6 obj read 6 obj, 1 errors our-error
cvefiles/cve-2024-32624.h5 error exit read 6 obj, 1 errors read 6 obj ok
cvefiles/cve-2024-33873.h5 error exit read 4 obj, 1 errors read 4 obj ok
cvefiles/cve-2024-33874.h5 ok read 6 obj, 1 errors read 6 obj, 1 errors our-error
cvefiles/cve-2024-33875.h5 ok read 2 obj read 2 obj ok
cvefiles/cve-2024-33876.h5 ok read 3 obj, 1 errors read 3 obj, 1 errors ok
cvefiles/cve-2024-33877.h5 error exit read 8 obj, 1 errors read 8 obj, 1 errors ok
cvefiles/cve-2025-2153.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2308.h5 error exit read 25 obj, 1 errors read 25 obj, 2 errors our-error
cvefiles/cve-2025-2309.h5 ok read 6 obj, 1 errors read 6 obj, 1 errors our-error
cvefiles/cve-2025-2310.h5 error exit read 24 obj, 8 errors read 24 obj, 8 errors ok
cvefiles/cve-2025-2912.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2913.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2914.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2915.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2923.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-2924.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-2925.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-2926.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-44904.h5 error exit read 25 obj, 1 errors read 25 obj, 1 errors mismatch
cvefiles/cve-2025-44905.h5 error exit read 25 obj, 3 errors read 25 obj, 3 errors mismatch
cvefiles/cve-2025-6269-1.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6269-2.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6269-3.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6269-4.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6270-1.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6270-2.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6270-3.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6516.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6750.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6816.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6817.h5 error exit open error read 1 obj h5py-cannot-read
cvefiles/cve-2025-6818.h5 error exit open error read 1 obj h5py-cannot-read
cvefiles/cve-2025-6856.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-6857.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-6858.h5 SIGSEGV open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-7067.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2025-7068.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2025-7069.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
cvefiles/cve-2026-26200.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
cvefiles/cve-2026-34734.h5 error exit read 2 obj, 1 errors read 2 obj ok
cvefiles/cve-2026-92627.h5 error exit read 2 obj, 1 errors read 2 obj, 1 errors ok
cvefiles/unknown-1.h5 error exit read 11 obj, 1 errors read 11 obj, 5 errors our-error
fuzzerfiles/gh-4431-poc-03.h5 error exit read 1 obj read 1 obj ok
fuzzerfiles/gh-4432-poc-05.h5 SIGSEGV read 1 obj, 1 errors read 1 obj, 1 errors ok
fuzzerfiles/gh-4433-poc-08.h5 error exit read 1 obj, 1 errors read 1 obj ok
fuzzerfiles/gh-4434-poc-09.h5 error exit open error read 1 obj, 1 errors h5py-cannot-read
fuzzerfiles/gh-4435-poc-10.h5 error exit read 1 obj, 1 errors read 1 obj, 1 errors ok
fuzzerfiles/gh-4585.h5 error exit open error open error h5py-cannot-read
fuzzerfiles/gh_2649_flawed.h5 error exit read 9 obj, 1 errors read 9 obj, 1 errors ok
fuzzerfiles/gh_2649_plain_model.h5 ok read 10 obj read 10 obj ok

Known not-our-bug

  • h5py big-endian variable-length sequences. h5py returns the elements of a VL sequence whose base type is big-endian with the file's big-endian bytes but a native (little-endian) numpy dtype, so the values it reports are byte-swapped garbage; h5dump prints the values clawhdf5 reads. Reproducer: h5py.vlen_dtype(np.dtype('>f4')) dataset holding [1.0, 2.0] reads back in h5py as [4.6e-41, 9.0e-44]. Affected here: NCAS-CMS_pyfive/tests/data/attr_datatypes.hdf5, hdf5/tools/test/testfiles/tcomplex_be.h5.
  • Non-IEEE floats and partial-precision integers (N-Bit). libhdf5 converts a float whose bit layout is not IEEE (e.g. H5Tset_precision for the N-Bit filter) or an integer with a bit offset / reduced precision into the plain numpy type of the same size. The probe compares such values as converted numbers, not raw file bytes (before 2026-09-25 it compared raw bytes, which reported every N-Bit float dataset as a mismatch).
  • Types h5py widens. Where h5py reads a type into a numpy type of a different size (FP8 -> float16, bfloat16 -> float32, x87 long double -> float128) the values are not compared (shape and presence still are): dataset file type size 1 -> numpy float16 (2) (15x), attr file type size 1 -> numpy float16 (2) (15x), dataset file type size 2 -> numpy float32 (4) (2x), dataset file type size 8 -> numpy float128 (16) (1x), dataset file type size 12 -> numpy float128 (16) (1x), attr file type size 2 -> numpy float32 (4) (1x), dataset file type size 2 -> numpy >f4 (4) (1x), attr file type size 2 -> numpy >f4 (4) (1x).
  • References are compared by presence only (R), not by target.

Objects h5py fails on but clawhdf5 reads

  • 19 x OSError: Can't synchronously read data (no appropriate function for conversion path)
  • 17 x KeyError: '…'
  • 1 x TypeError: unhandled dtype kind M (dtype('…'))
  • 1 x OSError: Can't synchronously read data (bad coordinate offset)
  • 1 x KeyError: "…"
  • 1 x ValueError: Insufficient precision in available types to represent (N, N, N, N, N)

Reproduce

# needs: Rust, python3 with h5py numpy hdf5plugin (conformance/requirements.txt), h5dump (hdf5-tools), git
CLAWHDF5_PYTHON=/path/to/venv/bin/python conformance/run.sh

The corpus (about 450 MB of sparse checkouts) is cached in conformance/.cache/; results for every file, both sides' raw JSON and stderr, are in conformance/.cache/results/. conformance/baseline.json holds the ok files the nightly CI job (.gitea/workflows/conformance.yml) must keep; conformance/run.sh --update-baseline rewrites it.