From d80ddf9e17fa694f06093f2dda6988c9f3f84209 Mon Sep 17 00:00:00 2001
From: GramParallelo <gramparallelo@gmail.com>
Date: Wed, 23 Mar 2022 16:20:07 -0700
Subject: [PATCH] Revert "Use Object.create(null) as `merge` target (#7920)"

This reverts commit 1d92605aa6c29add400c4c551413fc2306c15e8d.
---
 src/core/core.controller.js        | 8 ++++----
 src/core/core.datasetController.js | 2 +-
 src/core/core.scaleService.js      | 2 +-
 test/specs/helpers.core.tests.js   | 5 -----
 4 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/core/core.controller.js b/src/core/core.controller.js
index 194c5aa5004..98cffef2673 100644
--- a/src/core/core.controller.js
+++ b/src/core/core.controller.js
@@ -41,7 +41,7 @@ defaults._set('global', {
  * returns a deep copy of the result, thus doesn't alter inputs.
  */
 function mergeScaleConfig(/* config objects ... */) {
-	return helpers.merge(Object.create(null), [].slice.call(arguments), {
+	return helpers.merge({}, [].slice.call(arguments), {
 		merger: function(key, target, source, options) {
 			if (key === 'xAxes' || key === 'yAxes') {
 				var slen = source[key].length;
@@ -81,9 +81,9 @@ function mergeScaleConfig(/* config objects ... */) {
  * a deep copy of the result, thus doesn't alter inputs.
  */
 function mergeConfig(/* config objects ... */) {
-	return helpers.merge(Object.create(null), [].slice.call(arguments), {
+	return helpers.merge({}, [].slice.call(arguments), {
 		merger: function(key, target, source, options) {
-			var tval = target[key] || Object.create(null);
+			var tval = target[key] || {};
 			var sval = source[key];
 
 			if (key === 'scales') {
@@ -100,7 +100,7 @@ function mergeConfig(/* config objects ... */) {
 }
 
 function initConfig(config) {
-	config = config || Object.create(null);
+	config = config || {};
 
 	// Do NOT use mergeConfig for the data object because this method merges arrays
 	// and so would change references to labels and datasets, preventing data updates.
diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js
index 87e18aebe10..d17c7be0029 100644
--- a/src/core/core.datasetController.js
+++ b/src/core/core.datasetController.js
@@ -275,7 +275,7 @@ helpers.extend(DatasetController.prototype, {
 	 */
 	_configure: function() {
 		var me = this;
-		me._config = helpers.merge(Object.create(null), [
+		me._config = helpers.merge({}, [
 			me.chart.options.datasets[me._type],
 			me.getDataset(),
 		], {
diff --git a/src/core/core.scaleService.js b/src/core/core.scaleService.js
index 31ab1d63c98..fe945382003 100644
--- a/src/core/core.scaleService.js
+++ b/src/core/core.scaleService.js
@@ -22,7 +22,7 @@ module.exports = {
 	},
 	getScaleDefaults: function(type) {
 		// Return the scale defaults merged with the global settings so that we always use the latest ones
-		return this.defaults.hasOwnProperty(type) ? helpers.merge(Object.create(null), [defaults.scale, this.defaults[type]]) : {};
+		return this.defaults.hasOwnProperty(type) ? helpers.merge({}, [defaults.scale, this.defaults[type]]) : {};
 	},
 	updateScaleDefaults: function(type, additions) {
 		var me = this;
diff --git a/test/specs/helpers.core.tests.js b/test/specs/helpers.core.tests.js
index 7a818598a74..28e15989dd1 100644
--- a/test/specs/helpers.core.tests.js
+++ b/test/specs/helpers.core.tests.js
@@ -265,11 +265,6 @@ describe('Chart.helpers.core', function() {
 	});
 
 	describe('clone', function() {
-		it('should not allow prototype pollution', function() {
-			var test = helpers.clone(JSON.parse('{"__proto__":{"polluted": true}}'));
-			expect(test.prototype).toBeUndefined();
-			expect(Object.prototype.polluted).toBeUndefined();
-		});
 		it('should clone primitive values', function() {
 			expect(helpers.clone()).toBe(undefined);
 			expect(helpers.clone(null)).toBe(null);