GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix: match dtor function signatures to silence UBSan function-type check by pronskiy · Pull Request #52 · php-debugger/php-debugger

Conversation

@pronskiy

@pronskiy pronskiy commented Apr 15, 2026

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

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@pronskiy
pronskiy requested a review from carlos-granados April 15, 2026 14:04
@pronskiy pronskiy added ci CI/CD, GitHub Actions, testing infrastructure security labels Apr 15, 2026
@pronskiy
fix: match dtor function signatures to silence UBSan function-type check
7dfa442
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
fix: update xdebug_line_list_dtor forward declaration to match void* …
6dbefbb
…signature
@pronskiy
pronskiy marked this pull request as draft April 15, 2026 14:07
@pronskiy
ci: fix stray quote in sanitizers workflow PHP version matrix
7990f8f
@pronskiy
pronskiy marked this pull request as ready for review April 15, 2026 16:40
carlos-granados
carlos-granados approved these changes Apr 15, 2026
View reviewed changes

@carlos-granados carlos-granados left a comment

Copy link
Copy Markdown
Collaborator

There was a problem hiding this comment.

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

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@pronskiy

pronskiy commented Apr 15, 2026

Copy link
Copy Markdown
Member Author

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

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

pronskiy added 2 commits April 16, 2026 13:15
@pronskiy
Revert "fix: match dtor function signatures to silence UBSan function…
08431bf
…-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.
@pronskiy
ci: disable UBSan function-type check for sanitizers build
fb9bc14
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.
@pronskiy
pronskiy requested a review from carlos-granados April 16, 2026 11:27
carlos-granados
carlos-granados approved these changes Apr 16, 2026
View reviewed changes

@carlos-granados carlos-granados left a comment

Copy link
Copy Markdown
Collaborator

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Yeah, better

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@pronskiy
pronskiy merged commit c86fb06 into main Apr 19, 2026
14 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@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

Reviewers

@carlos-granados carlos-granados carlos-granados approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

ci CI/CD, GitHub Actions, testing infrastructure security

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Fix ASAN + UBSAN issues

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@pronskiy @carlos-granados
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.