From 8355c4305b4432f08ebfe075ead76bf7ea81c8d5 Mon Sep 17 00:00:00 2001 From: Denis Pushkarev Date: Fri, 16 Apr 2021 23:15:18 +0700 Subject: [PATCH] protect polyfilled built-in constructors from calling on instances --- CHANGELOG.md | 2 +- packages/core-js/internals/internal-state.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a67d6faea09..fc05c7f67897 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## Changelog ##### Unreleased -- Nothing +- Polyfilled built-in constructors protected from calling on instances ##### 3.10.1 - 2021.04.08 - Prevented possible `RegExp#split` problems in old engines, [#751](https://github.com/zloirock/core-js/issues/751), [#919](https://github.com/zloirock/core-js/issues/919) diff --git a/packages/core-js/internals/internal-state.js b/packages/core-js/internals/internal-state.js index 86c1e4933350..82b742c77730 100644 --- a/packages/core-js/internals/internal-state.js +++ b/packages/core-js/internals/internal-state.js @@ -7,6 +7,7 @@ var shared = require('../internals/shared-store'); var sharedKey = require('../internals/shared-key'); var hiddenKeys = require('../internals/hidden-keys'); +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; var WeakMap = global.WeakMap; var set, get, has; @@ -29,6 +30,7 @@ if (NATIVE_WEAK_MAP) { var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { + if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); metadata.facade = it; wmset.call(store, it, metadata); return metadata; @@ -43,6 +45,7 @@ if (NATIVE_WEAK_MAP) { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { + if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); metadata.facade = it; createNonEnumerableProperty(it, STATE, metadata); return metadata;