@@ -14479,6 +14479,22 @@ function charFromCodepoint(c) {
1447914479 );
1448014480}
1448114481
14482+ // set a property of a literal object, while protecting against prototype pollution,
14483+ // see https://github.com/nodeca/js-yaml/issues/164 for more details
14484+ function setProperty(object, key, value) {
14485+ // used for this specific key only because Object.defineProperty is slow
14486+ if (key === '__proto__') {
14487+ Object.defineProperty(object, key, {
14488+ configurable: true,
14489+ enumerable: true,
14490+ writable: true,
14491+ value: value
14492+ });
14493+ } else {
14494+ object[key] = value;
14495+ }
14496+ }
14497+
1448214498var simpleEscapeCheck = new Array(256); // integer, for fast access
1448314499var simpleEscapeMap = new Array(256);
1448414500for (var i = 0; i < 256; i++) {
@@ -14657,7 +14673,7 @@ function mergeMappings(state, destination, source, overridableKeys) {
1465714673 key = sourceKeys[index];
1465814674
1465914675 if (!_hasOwnProperty.call(destination, key)) {
14660- destination[ key] = source[key];
14676+ setProperty( destination, key, source[key]) ;
1466114677 overridableKeys[key] = true;
1466214678 }
1466314679 }
@@ -14717,17 +14733,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu
1471714733 throwError(state, 'duplicated mapping key');
1471814734 }
1471914735
14720- // used for this specific key only because Object.defineProperty is slow
14721- if (keyNode === '__proto__') {
14722- Object.defineProperty(_result, keyNode, {
14723- configurable: true,
14724- enumerable: true,
14725- writable: true,
14726- value: valueNode
14727- });
14728- } else {
14729- _result[keyNode] = valueNode;
14730- }
14736+ setProperty(_result, keyNode, valueNode);
1473114737 delete overridableKeys[keyNode];
1473214738 }
1473314739
0 commit comments