Skip to content
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

fix(inject): hasOwn instead of 'in' (fix #7284) #7460

Merged
merged 2 commits into from Mar 8, 2018

Conversation

privatenumber
Copy link
Contributor

The issue was caused by the in operator check to see if an injection exists in a parent provide.

In the particular Issue, the injection didn't work because the the Symbol polyfill adds a setter to the Object prototype for every Symbol created and the in-operator check evaluated to true on any object inheriting Object. Demo

However, I'm thinking the implications of using in may be further reaching as it could have been any native prototype property. Here I demonstrate using the string 'constructor' leads to unexpected injection behavior.

Although this fixes #7284, I am framing this as a fix for prototype properties being injected.

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Build-related changes
  • Other, please describe:

Does this PR introduce a breaking change? (check one)

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:

The PR fulfills these requirements:

If adding a new feature, the PR's description includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

Other information:

Hiroki Osame added 2 commits January 15, 2018 16:20
Symbol polyfill adds a setter on the Object prototype so the 'in' check evaluated to true on every
object

fix vuejs#7284
Prototype properties were being injected, so injecting 'constructor' would have hit the first
provide-layer and not yield expected results.

fix vuejs#7284
@yyx990803 yyx990803 merged commit 733c1be into vuejs:dev Mar 8, 2018
f2009 pushed a commit to f2009/vue that referenced this pull request Jan 25, 2019
)

fix vuejs#7284

* fix(Injection with Symbol polyfill): hasOwn instead of 'in'

Symbol polyfill adds a setter on the Object prototype so the 'in' check evaluated to true on every
object

* test(Injected properties): Ensures prototype properties aren't injected

Prototype properties were being injected, so injecting 'constructor' would have hit the first
provide-layer and not yield expected results.
aJean pushed a commit to aJean/vue that referenced this pull request Aug 19, 2020
)

fix vuejs#7284

* fix(Injection with Symbol polyfill): hasOwn instead of 'in'

Symbol polyfill adds a setter on the Object prototype so the 'in' check evaluated to true on every
object

* test(Injected properties): Ensures prototype properties aren't injected

Prototype properties were being injected, so injecting 'constructor' would have hit the first
provide-layer and not yield expected results.
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.

Provide/Inject fails with polyfilled Symbol
3 participants