@@ -12815,6 +12815,22 @@ function charFromCodepoint(c) {
1281512815 );
1281612816}
1281712817
12818+ // set a property of a literal object, while protecting against prototype pollution,
12819+ // see https://github.com/nodeca/js-yaml/issues/164 for more details
12820+ function setProperty(object, key, value) {
12821+ // used for this specific key only because Object.defineProperty is slow
12822+ if (key === '__proto__') {
12823+ Object.defineProperty(object, key, {
12824+ configurable: true,
12825+ enumerable: true,
12826+ writable: true,
12827+ value: value
12828+ });
12829+ } else {
12830+ object[key] = value;
12831+ }
12832+ }
12833+
1281812834var simpleEscapeCheck = new Array(256); // integer, for fast access
1281912835var simpleEscapeMap = new Array(256);
1282012836for (var i = 0; i < 256; i++) {
@@ -12972,7 +12988,7 @@ function mergeMappings(state, destination, source, overridableKeys) {
1297212988 key = sourceKeys[index];
1297312989
1297412990 if (!_hasOwnProperty.call(destination, key)) {
12975- destination[ key] = source[key];
12991+ setProperty( destination, key, source[key]) ;
1297612992 overridableKeys[key] = true;
1297712993 }
1297812994 }
@@ -13028,7 +13044,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu
1302813044 state.position = startPos || state.position;
1302913045 throwError(state, 'duplicated mapping key');
1303013046 }
13031- _result[ keyNode] = valueNode;
13047+ setProperty( _result, keyNode, valueNode) ;
1303213048 delete overridableKeys[keyNode];
1303313049 }
1303413050
0 commit comments