From: Jukka Kurkela Date: Tue, 29 Dec 2020 13:45:07 +0000 (+0200) Subject: Always freeze cached options (#8247) X-Git-Tag: v3.0.0-beta.8~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12682c619dc483186c7848db4779a858c01899da;p=thirdparty%2FChart.js.git Always freeze cached options (#8247) --- diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 8fbe02631..4dbc92956 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -208,7 +208,6 @@ const optionKeys = (optionNames) => isArray(optionNames) ? optionNames : Object. const optionKey = (key, active) => active ? 'hover' + _capitalize(key) : key; const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none'; const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); -const freezeIfShared = (values, shared) => shared ? Object.freeze(values) : values; export default class DatasetController { @@ -818,7 +817,8 @@ export default class DatasetController { // We cache options by `mode`, which can be 'active' for example. This enables us // to have the 'active' element options and 'default' options to switch between // when interacting. - cache[mode] = freezeIfShared(values, sharing); + // We freeze a clone of this object, so the returned values are not frozen. + cache[mode] = Object.freeze(Object.assign({}, values)); } return values;