Skip to content

fix(browser): Ignore __sentry_wrapped__ inherited from Function.prototype - #21506

Merged
Lms24 merged 1 commit into
getsentry:developfrom
bkchr:bkchr-fn-prototype
Jun 12, 2026
Merged

fix(browser): Ignore __sentry_wrapped__ inherited from Function.prototype#21506
Lms24 merged 1 commit into
getsentry:developfrom
bkchr:bkchr-fn-prototype

Conversation

@bkchr

Copy link
Copy Markdown
Contributor

When wrap() is called with Function.prototype itself as the callback (e.g. when a library passes Function.prototype as a noop handler), the wrapper is attached as an own property of Function.prototype. Every function then inherits __sentry_wrapped__ via the prototype chain, so subsequent wrap() calls returned the stale prototype wrapper instead of wrapping the fresh callback — silently breaking every event listener registered afterwards.

Check __sentry_wrapped__ via hasOwnProperty in wrap() and in the patched removeEventListener so inherited wrappers are ignored.

…ototype`
When `wrap()` is called with `Function.prototype` itself as the callback
(e.g. when a library passes `Function.prototype` as a noop handler), the
wrapper is attached as an own property of `Function.prototype`. Every
function then inherits `__sentry_wrapped__` via the prototype chain, so
subsequent `wrap()` calls returned the stale prototype wrapper instead of
wrapping the fresh callback — silently breaking every event listener
registered afterwards.
Check `__sentry_wrapped__` via `hasOwnProperty` in `wrap()` and in the
patched `removeEventListener` so inherited wrappers are ignored.
@bkchr
bkchr requested a review from a team as a code ownerJune 12, 2026 11:45
@bkchr
bkchr requested review from Lms24 and logaretm and removed request for a teamJune 12, 2026 11:45

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Hey @bkchr thanks for opening this PR! Looks like a good bugfix!

when a library passes Function.prototype as a noop handler

Do you have a concrete example of a library passing in Function.prototype? Just wondering how you ran into this issue.

@bkchr

Copy link
Copy Markdown
ContributorAuthor

This here uses noop, defined here. I will also report this to them, but still worth fixing in sentry :)

@Lms24

Copy link
Copy Markdown
Member

woah never seen a no-op function like this one. Great catch, thanks for fixing!

@Lms24
Lms24 merged commit fc57f86 into getsentry:developJun 12, 2026
174 checks passed
@bkchr
bkchr deleted the bkchr-fn-prototype branch June 12, 2026 14:38
@bkchr

Copy link
Copy Markdown
ContributorAuthor

Ty for the swift merge!

nicohrubec pushed a commit that referenced this pull request Jun 12, 2026
This PR adds the external contributor to the CHANGELOG.md file, so that
they are credited for their contribution. See #21506
Co-authored-by: Lms24 <8420481+Lms24@users.noreply.github.com>
Sign up for freeto 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.

2 participants

@bkchr@Lms24