@@ -13101,6 +13101,22 @@ function charFromCodepoint(c) {
1310113101 );
1310213102}
1310313103
13104+ // set a property of a literal object, while protecting against prototype pollution,
13105+ // see https://github.com/nodeca/js-yaml/issues/164 for more details
13106+ function setProperty(object, key, value) {
13107+ // used for this specific key only because Object.defineProperty is slow
13108+ if (key === '__proto__') {
13109+ Object.defineProperty(object, key, {
13110+ configurable: true,
13111+ enumerable: true,
13112+ writable: true,
13113+ value: value
13114+ });
13115+ } else {
13116+ object[key] = value;
13117+ }
13118+ }
13119+
1310413120var simpleEscapeCheck = new Array(256); // integer, for fast access
1310513121var simpleEscapeMap = new Array(256);
1310613122for (var i = 0; i < 256; i++) {
@@ -13279,7 +13295,7 @@ function mergeMappings(state, destination, source, overridableKeys) {
1327913295 key = sourceKeys[index];
1328013296
1328113297 if (!_hasOwnProperty.call(destination, key)) {
13282- destination[ key] = source[key];
13298+ setProperty( destination, key, source[key]) ;
1328313299 overridableKeys[key] = true;
1328413300 }
1328513301 }
@@ -13339,17 +13355,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu
1333913355 throwError(state, 'duplicated mapping key');
1334013356 }
1334113357
13342- // used for this specific key only because Object.defineProperty is slow
13343- if (keyNode === '__proto__') {
13344- Object.defineProperty(_result, keyNode, {
13345- configurable: true,
13346- enumerable: true,
13347- writable: true,
13348- value: valueNode
13349- });
13350- } else {
13351- _result[keyNode] = valueNode;
13352- }
13358+ setProperty(_result, keyNode, valueNode);
1335313359 delete overridableKeys[keyNode];
1335413360 }
1335513361
0 commit comments