From f3e9c1b59d5d3999ac6180ed75c84d88b29c41e6 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 1 Jul 2020 20:12:47 -0400 Subject: [PATCH] fix(runtime-core): avoid accidental access of Object.prototype properties --- packages/runtime-core/src/componentOptions.ts | 5 ++--- packages/runtime-core/src/componentProxy.ts | 9 ++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index ee92ef52..083a2c0d 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -723,9 +723,8 @@ export function resolveMergedOptions( function mergeOptions(to: any, from: any, instance: ComponentInternalInstance) { const strats = instance.appContext.config.optionMergeStrategies for (const key in from) { - const strat = strats && strats[key] - if (strat) { - to[key] = strat(to[key], from[key], instance.proxy, key) + if (strats && hasOwn(strats, key)) { + to[key] = strats[key](to[key], from[key], instance.proxy, key) } else if (!hasOwn(to, key)) { to[key] = from[key] } diff --git a/packages/runtime-core/src/componentProxy.ts b/packages/runtime-core/src/componentProxy.ts index 400e5521..5e3d5d1a 100644 --- a/packages/runtime-core/src/componentProxy.ts +++ b/packages/runtime-core/src/componentProxy.ts @@ -166,10 +166,9 @@ export type ComponentPublicInstanceConstructor< new (): T } -const publicPropertiesMap: Record< - string, - (i: ComponentInternalInstance) => any -> = { +type PublicPropertiesMap = Record any> + +const publicPropertiesMap: PublicPropertiesMap = extend(Object.create(null), { $: i => i, $el: i => i.vnode.el, $data: i => i.data, @@ -184,7 +183,7 @@ const publicPropertiesMap: Record< $forceUpdate: i => () => queueJob(i.update), $nextTick: () => nextTick, $watch: __FEATURE_OPTIONS__ ? i => instanceWatch.bind(i) : NOOP -} +} as PublicPropertiesMap) const enum AccessTypes { SETUP,