-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
fix: don't reuse proxies when state symbol refers to stale value #10343
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
When somebody copies over the state symbol property onto a new object (you can retrieve the symbol by using `Reflect.ownKeys(...)`), it was wrongfully assumed that it always relates to the current value. This PR adds an additional check that this is actually the case. This also adds a dev time warning when an object is frozen but contains a state property, which hints at a bug in user land. fixes #10316
🦋 Changeset detectedLatest commit: afa96a2 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
@@ -68,7 +84,7 @@ export function proxy(value, immutable = true) { | |||
* @returns {Record<string | symbol, any>} | |||
*/ | |||
function unwrap(value, already_unwrapped = new Map()) { | |||
if (typeof value === 'object' && value != null && !is_frozen(value) && STATE_SYMBOL in value) { | |||
if (typeof value === 'object' && value != null && STATE_SYMBOL in value) { |
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.
Do we really even need a STATE_SYMBOL
in the value? Then we can unwrap derived proxied objects too.
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.
countermanding the previous approval — i had a question and a couple of suggestions
When somebody copies over the state symbol property onto a new object (you can retrieve the symbol by using
Reflect.ownKeys(...)
), it was wrongfully assumed that it always relates to the current value. This PR adds an additional check that this is actually the case.This also adds a dev time warning when an object is frozen but contains a state property, which hints at a bug in user land.
fixes #10316
Before submitting the PR, please make sure you do the following
feat:
,fix:
,chore:
, ordocs:
.Tests and linting
pnpm test
and lint the project withpnpm lint