Skip to content

plan: UB-288 (crv_eval reads before the control points at a NaN parameter) and UB-289 (Fix_CoinVertices uses freed props pointers) - #2258

Merged
bherbruck merged 1 commit into
mainfrom
plan/ub288-ub289
Nov 1, 2026
Merged

bherbruck merged 1 commit into
mainfrom
plan/ub288-ub289

Conversation

@bherbruck

Copy link
Copy Markdown
Collaborator

Docs only: two new upstream-issue records, found while tracing the remaining STEP Tools --constructor corpus mismatches.

  • UB-288: on ap203/st203-bapl.stp body 0, two edges keep an unset interval (SetLimits returns 1007 on both kernels). CreateOrientedTrimBoundary builds their UV trim curves and reverses the parameterization, which divides 0 by 0 and gives a NaN interval. sm_CrvEval/N_BasisFindSpan at that NaN then read Pw[-1] of a degree-3 curve with two control points. C++ returns a garbage point with success, so its area "succeeds"; Rust's evaluation stops on its bounds check. This was read from the code for this input, not observed under a sanitizer. The corpus DIFF on this body stays: Rust's error is at least as good as C++'s garbage.
  • UB-289: on ap203/gehaeuse.stp body 0, Fix_CoinVertices rewrites a merged vertex's later pairs to the survivor's props pointer after UpdateTargetLists has freed and reallocated the props. C++ merges those pairs only when the allocator hands back the same address (as glibc did here: 226 edges / 141 vertices, against Rust's deterministic 228 / 143). It's the same class as the PR-164 finding. Rust's default stays deterministic.

Counts and function names only; no geometry.

🤖 Generated with Claude Code

…eter) and UB-289 (Fix_CoinVertices uses freed props pointers)

UB-288: CreateOrientedTrimBoundary reverses a UV trim curve built on an edge
whose limits were never set (0/0, NaN interval); sm_CrvEval then reads Pw[-1]
for a degree-3 curve with two control points. Found on STEP Tools
ap203/st203-bapl.stp body 0.

UB-289: Fix_CoinVertices rewrites later pairs to a survivor props pointer that
UpdateTargetLists has freed, so those merges depend on heap address reuse.
Found on ap203/gehaeuse.stp body 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@bherbruck
bherbruck merged commit 72221b5 into main Nov 1, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant