Skip to content

v1.9.1 — iccviz memory-safety + degenerate-detection (rebuild iccplot WASM)

Choose a tag to compare

@colourbill-ctrl colourbill-ctrl released this 18 Jul 01:26
· 37 commits to main since this release
v1.9.1
97a0041

profiletool 1.9.1 rebuilds the iccplot WASM module so the shipped Profile Plot / Analysis visualizations carry the memory-safety and degenerate-detection fixes surfaced by the iccDEV #1712 Copilot review. No UI or feature changes — this is a correctness/safety patch on the visualization engine.

Fixes

  • Use-after-free / double-free in the visualization transform path. CIccXform::Create defaults to bOwnsProfile=true, so a failed Create() deleted the borrowed profile the caller still owned. All 5 call sites in IccVizModel now pass bOwnsProfile=false. This was reachable from the shipped Profile Plot / Analysis code.
  • Degenerate-gamut detection for Gamut Volume. The enclosed-volume estimate uses morphological closing, which floors a collapsed plane/line at ~1 voxel and reports a non-zero sheet/tube artifact instead of ~0. A new closed-form principal-axis analysis (iccvizmath::principalStdDevs, symmetric-3×3 eigenvalues) flags a boundary cloud collapsed toward a plane (thinnest extent ≈ 0) so the metric is marked degenerate rather than silently wrong.
  • Signed-overflow hardening. Two S + 1 index computations promoted to (double)S + 1.0.
  • Doc-comment corrections — the tag walk uses a fixed canonical signature order, not the profile's tag-table order.

Build provenance

Built against a clean iccDEV origin/master (3c656146). Only iccplot.wasm changes versus 1.9.0 — no IccProfLib drift into the other modules. scripts/build-wasm.sh --verify reproduces the committed SHA256SUMS.

The same source fixes are staged upstream for iccDEV (#1712 successor branch); profiletool ships them now because the bug is reachable in the deployed WASM.