Skip to content

fix: match dtor function signatures to silence UBSan function-type check#52

Merged
pronskiy merged 5 commits into
mainfrom
fix/asan-ubsan-issues
Apr 19, 2026
Merged

fix: match dtor function signatures to silence UBSan function-type check#52
pronskiy merged 5 commits into
mainfrom
fix/asan-ubsan-issues

Conversation

@pronskiy

Copy link
Copy Markdown
Member
  • Destructor functions were defined with typed parameters and cast to the generic void(*)(void*) hash/llist dtor slot. UBSan's
    -fsanitize=function flags this as UB and aborts during request shutdown, cascading into dbgp test failures.
  • Change the dtors to take void * and cast internally; drop the now-unnecessary casts at registration sites. Wrap
    zend_string_release in a local dtor since its signature is fixed.
  • No behavioral or performance change in production builds.

Fixes #50

@pronskiy pronskiy added ci CI/CD, GitHub Actions, testing infrastructure security labels Apr 15, 2026
Destructor functions stored in hash/llist dtor slots were defined with
typed parameters and cast to the generic void(*)(void*) slot type. UBSan's
-fsanitize=function flags calls through a mismatched pointer as undefined
behavior, aborting in post-deactivate during request shutdown and breaking
dbgp tests downstream.

Change the dtors to take void* and cast internally so the pointer type
matches the callee's real signature; drop the now-unnecessary casts at
registration sites. Wrap zend_string_release in a local dtor since its
signature is fixed.
@pronskiy
pronskiy force-pushed the fix/asan-ubsan-issues branch from 745c431 to 7dfa442 Compare April 15, 2026 14:05
@pronskiy
pronskiy marked this pull request as draft April 15, 2026 14:07
@pronskiy
pronskiy marked this pull request as ready for review April 15, 2026 16:40

@carlos-granados carlos-granados left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These seem to be changes only made to please the tool but I guess they are harmless, let's go ahead with them

@pronskiy

Copy link
Copy Markdown
Member Author

Yeah, i tend to agree. This will also introduce unnecessary variance with Xdebug

…-type check"

This reverts commit 7dfa442 and the follow-up 6dbefbb. The function-type
cast pattern is preserved as-is in upstream Xdebug; rewriting dtors to
take void* would create ongoing merge friction for a benign-in-practice
UBSan diagnostic. Suppressing the check at the CI level instead.
The dtor registration pattern (casting typed destructors to the generic
xdebug hash/llist dtor slot types) is shared with upstream Xdebug and
works correctly on all supported platforms, but trips UBSan's
-fsanitize=function indirect-call type check. Suppress the check at
build time rather than diverge from upstream source.

@carlos-granados carlos-granados left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, better

@pronskiy
pronskiy merged commit c86fb06 into main Apr 19, 2026
14 checks passed
@carlos-granados
carlos-granados deleted the fix/asan-ubsan-issues branch May 5, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/CD, GitHub Actions, testing infrastructure security

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix ASAN + UBSAN issues

2 participants