handlebars-source 4.7.8 → 4.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/handlebars.js +163 -109
  3. data/handlebars.runtime.js +57 -72
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8682ed84fc4fbf83a5c14b15fa33d839b84c9605e6bdc747cf7ca68b3ec12a71
4
- data.tar.gz: 8921f02bf40595c6f02cb606687e27319e61d7bbd656fcf30b9b6b91ccf8391a
3
+ metadata.gz: 79b760036a203b609cbbc1d0bc2e0b19804fe3d45a0c90ce2e19092009822912
4
+ data.tar.gz: 3a039c765182c00cc4cada63cae3b39b22b23ef77fb02f3e54198f4e7b7942a8
5
5
  SHA512:
6
- metadata.gz: 5e278d85e94a300c8610cdb0fec390562e5396ad57c2276c1aa480684178a4945a368a183c45a09a201a0ecdd68e892bc64a674a75db774aa95d6654bf7221f7
7
- data.tar.gz: e3a5c4e17e4f3ef3c4a75c6484c0ae76efcf8032a081b786abb2bdedbafc2c926af444a1b7f71b092e256fb474550102938e52fbb71efd6df79ff92e4cac0bd0
6
+ metadata.gz: 5d5c3c92272132af5235ff5bb76dc6a36b93464a5ecaf385113191328c3bab2e7326148b92fab075e3bc9ac2cc998600cc86aa1254e3145fdc72296d4334b3f1
7
+ data.tar.gz: 4520b66ebcfb3a958ac2a9e743afb38c8164a43b65217a04497ae641d7d4121989ab64ec5aa487128fe171935bbda78c6040356e9fb1bff3594f146edae174c9
data/handlebars.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**!
2
2
 
3
3
  @license
4
- handlebars v4.7.8
4
+ handlebars v4.7.9
5
5
 
6
6
  Copyright (C) 2011-2019 by Yehuda Katz
7
7
 
@@ -92,23 +92,23 @@ return /******/ (function(modules) { // webpackBootstrap
92
92
 
93
93
  // Compiler imports
94
94
 
95
- var _handlebarsCompilerAst = __webpack_require__(84);
95
+ var _handlebarsCompilerAst = __webpack_require__(83);
96
96
 
97
97
  var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
98
98
 
99
- var _handlebarsCompilerBase = __webpack_require__(85);
99
+ var _handlebarsCompilerBase = __webpack_require__(84);
100
100
 
101
- var _handlebarsCompilerCompiler = __webpack_require__(90);
101
+ var _handlebarsCompilerCompiler = __webpack_require__(89);
102
102
 
103
- var _handlebarsCompilerJavascriptCompiler = __webpack_require__(91);
103
+ var _handlebarsCompilerJavascriptCompiler = __webpack_require__(90);
104
104
 
105
105
  var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
106
106
 
107
- var _handlebarsCompilerVisitor = __webpack_require__(88);
107
+ var _handlebarsCompilerVisitor = __webpack_require__(87);
108
108
 
109
109
  var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
110
110
 
111
- var _handlebarsNoConflict = __webpack_require__(83);
111
+ var _handlebarsNoConflict = __webpack_require__(82);
112
112
 
113
113
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
114
114
 
@@ -178,7 +178,7 @@ return /******/ (function(modules) { // webpackBootstrap
178
178
  // Each of these augment the Handlebars object. No need to setup here.
179
179
  // (This is done to easily share code between commonjs and browse envs)
180
180
 
181
- var _handlebarsSafeString = __webpack_require__(77);
181
+ var _handlebarsSafeString = __webpack_require__(76);
182
182
 
183
183
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
184
184
 
@@ -190,11 +190,11 @@ return /******/ (function(modules) { // webpackBootstrap
190
190
 
191
191
  var Utils = _interopRequireWildcard(_handlebarsUtils);
192
192
 
193
- var _handlebarsRuntime = __webpack_require__(78);
193
+ var _handlebarsRuntime = __webpack_require__(77);
194
194
 
195
195
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
196
196
 
197
- var _handlebarsNoConflict = __webpack_require__(83);
197
+ var _handlebarsNoConflict = __webpack_require__(82);
198
198
 
199
199
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
200
200
 
@@ -278,7 +278,7 @@ return /******/ (function(modules) { // webpackBootstrap
278
278
 
279
279
  var _internalProtoAccess = __webpack_require__(73);
280
280
 
281
- var VERSION = '4.7.8';
281
+ var VERSION = '4.7.9';
282
282
  exports.VERSION = VERSION;
283
283
  var COMPILER_REVISION = 8;
284
284
  exports.COMPILER_REVISION = COMPILER_REVISION;
@@ -655,7 +655,8 @@ return /******/ (function(modules) { // webpackBootstrap
655
655
  if (instance.helpers[helperName]) {
656
656
  instance.hooks[helperName] = instance.helpers[helperName];
657
657
  if (!keepHelper) {
658
- delete instance.helpers[helperName];
658
+ // Using delete is slow
659
+ instance.helpers[helperName] = undefined;
659
660
  }
660
661
  }
661
662
  }
@@ -2041,7 +2042,7 @@ return /******/ (function(modules) { // webpackBootstrap
2041
2042
  exports.resultIsAllowed = resultIsAllowed;
2042
2043
  exports.resetLoggedProperties = resetLoggedProperties;
2043
2044
 
2044
- var _createNewLookupObject = __webpack_require__(76);
2045
+ var _utils = __webpack_require__(5);
2045
2046
 
2046
2047
  var _logger = __webpack_require__(72);
2047
2048
 
@@ -2050,23 +2051,28 @@ return /******/ (function(modules) { // webpackBootstrap
2050
2051
  var loggedProperties = _Object$create(null);
2051
2052
 
2052
2053
  function createProtoAccessControl(runtimeOptions) {
2053
- var defaultMethodWhiteList = _Object$create(null);
2054
- defaultMethodWhiteList['constructor'] = false;
2055
- defaultMethodWhiteList['__defineGetter__'] = false;
2056
- defaultMethodWhiteList['__defineSetter__'] = false;
2057
- defaultMethodWhiteList['__lookupGetter__'] = false;
2058
-
2059
- var defaultPropertyWhiteList = _Object$create(null);
2054
+ // Create an object with "null"-prototype to avoid truthy results on
2055
+ // prototype properties.
2056
+ var propertyWhiteList = _Object$create(null);
2060
2057
  // eslint-disable-next-line no-proto
2061
- defaultPropertyWhiteList['__proto__'] = false;
2058
+ propertyWhiteList['__proto__'] = false;
2059
+ _utils.extend(propertyWhiteList, runtimeOptions.allowedProtoProperties);
2060
+
2061
+ var methodWhiteList = _Object$create(null);
2062
+ methodWhiteList['constructor'] = false;
2063
+ methodWhiteList['__defineGetter__'] = false;
2064
+ methodWhiteList['__defineSetter__'] = false;
2065
+ methodWhiteList['__lookupGetter__'] = false;
2066
+ methodWhiteList['__lookupSetter__'] = false;
2067
+ _utils.extend(methodWhiteList, runtimeOptions.allowedProtoMethods);
2062
2068
 
2063
2069
  return {
2064
2070
  properties: {
2065
- whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
2071
+ whitelist: propertyWhiteList,
2066
2072
  defaultValue: runtimeOptions.allowProtoPropertiesByDefault
2067
2073
  },
2068
2074
  methods: {
2069
- whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
2075
+ whitelist: methodWhiteList,
2070
2076
  defaultValue: runtimeOptions.allowProtoMethodsByDefault
2071
2077
  }
2072
2078
  };
@@ -2121,34 +2127,6 @@ return /******/ (function(modules) { // webpackBootstrap
2121
2127
 
2122
2128
  /***/ }),
2123
2129
  /* 76 */
2124
- /***/ (function(module, exports, __webpack_require__) {
2125
-
2126
- 'use strict';
2127
-
2128
- var _Object$create = __webpack_require__(74)['default'];
2129
-
2130
- exports.__esModule = true;
2131
- exports.createNewLookupObject = createNewLookupObject;
2132
-
2133
- var _utils = __webpack_require__(5);
2134
-
2135
- /**
2136
- * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
2137
- * The resulting object can be used with "object[property]" to check if a property exists
2138
- * @param {...object} sources a varargs parameter of source objects that will be merged
2139
- * @returns {object}
2140
- */
2141
-
2142
- function createNewLookupObject() {
2143
- for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
2144
- sources[_key] = arguments[_key];
2145
- }
2146
-
2147
- return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));
2148
- }
2149
-
2150
- /***/ }),
2151
- /* 77 */
2152
2130
  /***/ (function(module, exports) {
2153
2131
 
2154
2132
  // Build out our basic SafeString type
@@ -2167,12 +2145,12 @@ return /******/ (function(modules) { // webpackBootstrap
2167
2145
  module.exports = exports['default'];
2168
2146
 
2169
2147
  /***/ }),
2170
- /* 78 */
2148
+ /* 77 */
2171
2149
  /***/ (function(module, exports, __webpack_require__) {
2172
2150
 
2173
2151
  'use strict';
2174
2152
 
2175
- var _Object$seal = __webpack_require__(79)['default'];
2153
+ var _Object$seal = __webpack_require__(78)['default'];
2176
2154
 
2177
2155
  var _Object$keys = __webpack_require__(60)['default'];
2178
2156
 
@@ -2200,7 +2178,7 @@ return /******/ (function(modules) { // webpackBootstrap
2200
2178
 
2201
2179
  var _helpers = __webpack_require__(10);
2202
2180
 
2203
- var _internalWrapHelper = __webpack_require__(82);
2181
+ var _internalWrapHelper = __webpack_require__(81);
2204
2182
 
2205
2183
  var _internalProtoAccess = __webpack_require__(73);
2206
2184
 
@@ -2249,16 +2227,14 @@ return /******/ (function(modules) { // webpackBootstrap
2249
2227
  }
2250
2228
  partial = env.VM.resolvePartial.call(this, partial, context, options);
2251
2229
 
2252
- var extendedOptions = Utils.extend({}, options, {
2253
- hooks: this.hooks,
2254
- protoAccessControl: this.protoAccessControl
2255
- });
2230
+ options.hooks = this.hooks;
2231
+ options.protoAccessControl = this.protoAccessControl;
2256
2232
 
2257
- var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
2233
+ var result = env.VM.invokePartial.call(this, partial, context, options);
2258
2234
 
2259
2235
  if (result == null && env.compile) {
2260
2236
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
2261
- result = options.partials[options.name](context, extendedOptions);
2237
+ result = options.partials[options.name](context, options);
2262
2238
  }
2263
2239
  if (result != null) {
2264
2240
  if (options.indent) {
@@ -2307,7 +2283,7 @@ return /******/ (function(modules) { // webpackBootstrap
2307
2283
  for (var i = 0; i < len; i++) {
2308
2284
  var result = depths[i] && container.lookupProperty(depths[i], name);
2309
2285
  if (result != null) {
2310
- return depths[i][name];
2286
+ return result;
2311
2287
  }
2312
2288
  }
2313
2289
  },
@@ -2389,8 +2365,9 @@ return /******/ (function(modules) { // webpackBootstrap
2389
2365
 
2390
2366
  ret._setup = function (options) {
2391
2367
  if (!options.partial) {
2392
- var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
2393
- wrapHelpersToPassLookupProperty(mergedHelpers, container);
2368
+ var mergedHelpers = {};
2369
+ addHelpers(mergedHelpers, env.helpers, container);
2370
+ addHelpers(mergedHelpers, options.helpers, container);
2394
2371
  container.helpers = mergedHelpers;
2395
2372
 
2396
2373
  if (templateSpec.usePartial) {
@@ -2456,21 +2433,21 @@ return /******/ (function(modules) { // webpackBootstrap
2456
2433
  function resolvePartial(partial, context, options) {
2457
2434
  if (!partial) {
2458
2435
  if (options.name === '@partial-block') {
2459
- partial = options.data['partial-block'];
2436
+ partial = lookupOwnProperty(options.data, 'partial-block');
2460
2437
  } else {
2461
- partial = options.partials[options.name];
2438
+ partial = lookupOwnProperty(options.partials, options.name);
2462
2439
  }
2463
2440
  } else if (!partial.call && !options.name) {
2464
2441
  // This is a dynamic partial that returned a string
2465
2442
  options.name = partial;
2466
- partial = options.partials[partial];
2443
+ partial = lookupOwnProperty(options.partials, partial);
2467
2444
  }
2468
2445
  return partial;
2469
2446
  }
2470
2447
 
2471
2448
  function invokePartial(partial, context, options) {
2472
2449
  // Use the current closure context to save the partial-block if this partial
2473
- var currentPartialBlock = options.data && options.data['partial-block'];
2450
+ var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block');
2474
2451
  options.partial = true;
2475
2452
  if (options.ids) {
2476
2453
  options.data.contextPath = options.ids[0] || options.data.contextPath;
@@ -2512,6 +2489,12 @@ return /******/ (function(modules) { // webpackBootstrap
2512
2489
  return '';
2513
2490
  }
2514
2491
 
2492
+ function lookupOwnProperty(obj, name) {
2493
+ if (obj && Object.prototype.hasOwnProperty.call(obj, name)) {
2494
+ return obj[name];
2495
+ }
2496
+ }
2497
+
2515
2498
  function initData(context, data) {
2516
2499
  if (!data || !('root' in data)) {
2517
2500
  data = data ? _base.createFrame(data) : {};
@@ -2529,9 +2512,10 @@ return /******/ (function(modules) { // webpackBootstrap
2529
2512
  return prog;
2530
2513
  }
2531
2514
 
2532
- function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
2533
- _Object$keys(mergedHelpers).forEach(function (helperName) {
2534
- var helper = mergedHelpers[helperName];
2515
+ function addHelpers(mergedHelpers, helpers, container) {
2516
+ if (!helpers) return;
2517
+ _Object$keys(helpers).forEach(function (helperName) {
2518
+ var helper = helpers[helperName];
2535
2519
  mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
2536
2520
  });
2537
2521
  }
@@ -2539,25 +2523,26 @@ return /******/ (function(modules) { // webpackBootstrap
2539
2523
  function passLookupPropertyOption(helper, container) {
2540
2524
  var lookupProperty = container.lookupProperty;
2541
2525
  return _internalWrapHelper.wrapHelper(helper, function (options) {
2542
- return Utils.extend({ lookupProperty: lookupProperty }, options);
2526
+ options.lookupProperty = lookupProperty;
2527
+ return options;
2543
2528
  });
2544
2529
  }
2545
2530
 
2546
2531
  /***/ }),
2547
- /* 79 */
2532
+ /* 78 */
2548
2533
  /***/ (function(module, exports, __webpack_require__) {
2549
2534
 
2550
- module.exports = { "default": __webpack_require__(80), __esModule: true };
2535
+ module.exports = { "default": __webpack_require__(79), __esModule: true };
2551
2536
 
2552
2537
  /***/ }),
2553
- /* 80 */
2538
+ /* 79 */
2554
2539
  /***/ (function(module, exports, __webpack_require__) {
2555
2540
 
2556
- __webpack_require__(81);
2541
+ __webpack_require__(80);
2557
2542
  module.exports = __webpack_require__(21).Object.seal;
2558
2543
 
2559
2544
  /***/ }),
2560
- /* 81 */
2545
+ /* 80 */
2561
2546
  /***/ (function(module, exports, __webpack_require__) {
2562
2547
 
2563
2548
  // 19.1.2.17 Object.seal(O)
@@ -2570,7 +2555,7 @@ return /******/ (function(modules) { // webpackBootstrap
2570
2555
  });
2571
2556
 
2572
2557
  /***/ }),
2573
- /* 82 */
2558
+ /* 81 */
2574
2559
  /***/ (function(module, exports) {
2575
2560
 
2576
2561
  'use strict';
@@ -2593,7 +2578,7 @@ return /******/ (function(modules) { // webpackBootstrap
2593
2578
  }
2594
2579
 
2595
2580
  /***/ }),
2596
- /* 83 */
2581
+ /* 82 */
2597
2582
  /***/ (function(module, exports) {
2598
2583
 
2599
2584
  /* global globalThis */
@@ -2627,7 +2612,7 @@ return /******/ (function(modules) { // webpackBootstrap
2627
2612
  module.exports = exports['default'];
2628
2613
 
2629
2614
  /***/ }),
2630
- /* 84 */
2615
+ /* 83 */
2631
2616
  /***/ (function(module, exports) {
2632
2617
 
2633
2618
  'use strict';
@@ -2662,11 +2647,13 @@ return /******/ (function(modules) { // webpackBootstrap
2662
2647
  module.exports = exports['default'];
2663
2648
 
2664
2649
  /***/ }),
2665
- /* 85 */
2650
+ /* 84 */
2666
2651
  /***/ (function(module, exports, __webpack_require__) {
2667
2652
 
2668
2653
  'use strict';
2669
2654
 
2655
+ var _Object$keys = __webpack_require__(60)['default'];
2656
+
2670
2657
  var _interopRequireDefault = __webpack_require__(1)['default'];
2671
2658
 
2672
2659
  var _interopRequireWildcard = __webpack_require__(3)['default'];
@@ -2675,18 +2662,22 @@ return /******/ (function(modules) { // webpackBootstrap
2675
2662
  exports.parseWithoutProcessing = parseWithoutProcessing;
2676
2663
  exports.parse = parse;
2677
2664
 
2678
- var _parser = __webpack_require__(86);
2665
+ var _parser = __webpack_require__(85);
2679
2666
 
2680
2667
  var _parser2 = _interopRequireDefault(_parser);
2681
2668
 
2682
- var _whitespaceControl = __webpack_require__(87);
2669
+ var _whitespaceControl = __webpack_require__(86);
2683
2670
 
2684
2671
  var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
2685
2672
 
2686
- var _helpers = __webpack_require__(89);
2673
+ var _helpers = __webpack_require__(88);
2687
2674
 
2688
2675
  var Helpers = _interopRequireWildcard(_helpers);
2689
2676
 
2677
+ var _exception = __webpack_require__(6);
2678
+
2679
+ var _exception2 = _interopRequireDefault(_exception);
2680
+
2690
2681
  var _utils = __webpack_require__(5);
2691
2682
 
2692
2683
  exports.parser = _parser2['default'];
@@ -2697,6 +2688,9 @@ return /******/ (function(modules) { // webpackBootstrap
2697
2688
  function parseWithoutProcessing(input, options) {
2698
2689
  // Just return if an already-compiled AST was passed in.
2699
2690
  if (input.type === 'Program') {
2691
+ // When a pre-parsed AST is passed in, validate all node values to prevent
2692
+ // code injection via type-confused literals.
2693
+ validateInputAst(input);
2700
2694
  return input;
2701
2695
  }
2702
2696
 
@@ -2719,8 +2713,60 @@ return /******/ (function(modules) { // webpackBootstrap
2719
2713
  return strip.accept(ast);
2720
2714
  }
2721
2715
 
2716
+ function validateInputAst(ast) {
2717
+ validateAstNode(ast);
2718
+ }
2719
+
2720
+ function validateAstNode(node) {
2721
+ if (node == null) {
2722
+ return;
2723
+ }
2724
+
2725
+ if (Array.isArray(node)) {
2726
+ node.forEach(validateAstNode);
2727
+ return;
2728
+ }
2729
+
2730
+ if (typeof node !== 'object') {
2731
+ return;
2732
+ }
2733
+
2734
+ if (node.type === 'PathExpression') {
2735
+ if (!isValidDepth(node.depth)) {
2736
+ throw new _exception2['default']('Invalid AST: PathExpression.depth must be an integer');
2737
+ }
2738
+ if (!Array.isArray(node.parts)) {
2739
+ throw new _exception2['default']('Invalid AST: PathExpression.parts must be an array');
2740
+ }
2741
+ for (var i = 0; i < node.parts.length; i++) {
2742
+ if (typeof node.parts[i] !== 'string') {
2743
+ throw new _exception2['default']('Invalid AST: PathExpression.parts must only contain strings');
2744
+ }
2745
+ }
2746
+ } else if (node.type === 'NumberLiteral') {
2747
+ if (typeof node.value !== 'number' || !isFinite(node.value)) {
2748
+ throw new _exception2['default']('Invalid AST: NumberLiteral.value must be a number');
2749
+ }
2750
+ } else if (node.type === 'BooleanLiteral') {
2751
+ if (typeof node.value !== 'boolean') {
2752
+ throw new _exception2['default']('Invalid AST: BooleanLiteral.value must be a boolean');
2753
+ }
2754
+ }
2755
+
2756
+ _Object$keys(node).forEach(function (propertyName) {
2757
+ if (propertyName === 'loc') {
2758
+ return;
2759
+ }
2760
+ validateAstNode(node[propertyName]);
2761
+ });
2762
+ }
2763
+
2764
+ function isValidDepth(depth) {
2765
+ return typeof depth === 'number' && isFinite(depth) && Math.floor(depth) === depth && depth >= 0;
2766
+ }
2767
+
2722
2768
  /***/ }),
2723
- /* 86 */
2769
+ /* 85 */
2724
2770
  /***/ (function(module, exports) {
2725
2771
 
2726
2772
  // File ignored in coverage tests via setting in .istanbul.yml
@@ -3461,7 +3507,7 @@ return /******/ (function(modules) { // webpackBootstrap
3461
3507
  module.exports = exports["default"];
3462
3508
 
3463
3509
  /***/ }),
3464
- /* 87 */
3510
+ /* 86 */
3465
3511
  /***/ (function(module, exports, __webpack_require__) {
3466
3512
 
3467
3513
  'use strict';
@@ -3470,7 +3516,7 @@ return /******/ (function(modules) { // webpackBootstrap
3470
3516
 
3471
3517
  exports.__esModule = true;
3472
3518
 
3473
- var _visitor = __webpack_require__(88);
3519
+ var _visitor = __webpack_require__(87);
3474
3520
 
3475
3521
  var _visitor2 = _interopRequireDefault(_visitor);
3476
3522
 
@@ -3685,7 +3731,7 @@ return /******/ (function(modules) { // webpackBootstrap
3685
3731
  module.exports = exports['default'];
3686
3732
 
3687
3733
  /***/ }),
3688
- /* 88 */
3734
+ /* 87 */
3689
3735
  /***/ (function(module, exports, __webpack_require__) {
3690
3736
 
3691
3737
  'use strict';
@@ -3828,7 +3874,7 @@ return /******/ (function(modules) { // webpackBootstrap
3828
3874
  module.exports = exports['default'];
3829
3875
 
3830
3876
  /***/ }),
3831
- /* 89 */
3877
+ /* 88 */
3832
3878
  /***/ (function(module, exports, __webpack_require__) {
3833
3879
 
3834
3880
  'use strict';
@@ -4059,7 +4105,7 @@ return /******/ (function(modules) { // webpackBootstrap
4059
4105
  }
4060
4106
 
4061
4107
  /***/ }),
4062
- /* 90 */
4108
+ /* 89 */
4063
4109
  /***/ (function(module, exports, __webpack_require__) {
4064
4110
 
4065
4111
  /* eslint-disable new-cap */
@@ -4081,7 +4127,7 @@ return /******/ (function(modules) { // webpackBootstrap
4081
4127
 
4082
4128
  var _utils = __webpack_require__(5);
4083
4129
 
4084
- var _ast = __webpack_require__(84);
4130
+ var _ast = __webpack_require__(83);
4085
4131
 
4086
4132
  var _ast2 = _interopRequireDefault(_ast);
4087
4133
 
@@ -4630,7 +4676,7 @@ return /******/ (function(modules) { // webpackBootstrap
4630
4676
  }
4631
4677
 
4632
4678
  /***/ }),
4633
- /* 91 */
4679
+ /* 90 */
4634
4680
  /***/ (function(module, exports, __webpack_require__) {
4635
4681
 
4636
4682
  'use strict';
@@ -4649,7 +4695,7 @@ return /******/ (function(modules) { // webpackBootstrap
4649
4695
 
4650
4696
  var _utils = __webpack_require__(5);
4651
4697
 
4652
- var _codeGen = __webpack_require__(92);
4698
+ var _codeGen = __webpack_require__(91);
4653
4699
 
4654
4700
  var _codeGen2 = _interopRequireDefault(_codeGen);
4655
4701
 
@@ -4794,12 +4840,10 @@ return /******/ (function(modules) { // webpackBootstrap
4794
4840
  var decorators = _context.decorators;
4795
4841
 
4796
4842
  for (i = 0, l = programs.length; i < l; i++) {
4797
- if (programs[i]) {
4798
- ret[i] = programs[i];
4799
- if (decorators[i]) {
4800
- ret[i + '_d'] = decorators[i];
4801
- ret.useDecorators = true;
4802
- }
4843
+ ret[i] = programs[i];
4844
+ if (decorators[i]) {
4845
+ ret[i + '_d'] = decorators[i];
4846
+ ret.useDecorators = true;
4803
4847
  }
4804
4848
  }
4805
4849
 
@@ -5125,20 +5169,21 @@ return /******/ (function(modules) { // webpackBootstrap
5125
5169
  this.resolvePath('data', parts, 0, true, strict);
5126
5170
  },
5127
5171
 
5128
- resolvePath: function resolvePath(type, parts, i, falsy, strict) {
5172
+ resolvePath: function resolvePath(type, parts, startPartIndex, falsy, strict) {
5129
5173
  // istanbul ignore next
5130
5174
 
5131
5175
  var _this2 = this;
5132
5176
 
5133
5177
  if (this.options.strict || this.options.assumeObjects) {
5134
- this.push(strictLookup(this.options.strict && strict, this, parts, i, type));
5178
+ this.push(strictLookup(this.options.strict && strict, this, parts, startPartIndex, type));
5135
5179
  return;
5136
5180
  }
5137
5181
 
5138
5182
  var len = parts.length;
5139
- for (; i < len; i++) {
5183
+
5184
+ var _loop = function (i) {
5140
5185
  /* eslint-disable no-loop-func */
5141
- this.replaceStack(function (current) {
5186
+ _this2.replaceStack(function (current) {
5142
5187
  var lookup = _this2.nameLookup(current, parts[i], type);
5143
5188
  // We want to ensure that zero and false are handled properly if the context (falsy flag)
5144
5189
  // needs to have the special handling for these values.
@@ -5150,6 +5195,10 @@ return /******/ (function(modules) { // webpackBootstrap
5150
5195
  }
5151
5196
  });
5152
5197
  /* eslint-enable no-loop-func */
5198
+ };
5199
+
5200
+ for (var i = startPartIndex; i < len; i++) {
5201
+ _loop(i);
5153
5202
  }
5154
5203
  },
5155
5204
 
@@ -5267,7 +5316,12 @@ return /******/ (function(modules) { // webpackBootstrap
5267
5316
  var foundDecorator = this.nameLookup('decorators', name, 'decorator'),
5268
5317
  options = this.setupHelperArgs(name, paramSize);
5269
5318
 
5270
- this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);
5319
+ // Store the resolved decorator in a variable and verify it is a function before
5320
+ // calling it. Without this, unregistered decorators can cause an unhandled TypeError
5321
+ // (calling undefined), which crashes the process — enabling Denial of Service.
5322
+ this.decorators.push(['var decorator = ', foundDecorator, ';']);
5323
+ this.decorators.push(['if (typeof decorator !== "function") { throw new Error(', this.quotedString('Missing decorator: "' + name + '"'), '); }']);
5324
+ this.decorators.push(['fn = ', this.decorators.functionCall('decorator', '', ['fn', 'props', 'container', options]), ' || fn;']);
5271
5325
  },
5272
5326
 
5273
5327
  // [invokeHelper]
@@ -5450,8 +5504,8 @@ return /******/ (function(modules) { // webpackBootstrap
5450
5504
  var existing = this.matchExistingProgram(child);
5451
5505
 
5452
5506
  if (existing == null) {
5453
- this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
5454
- var index = this.context.programs.length;
5507
+ // Placeholder to prevent name conflicts for nested children
5508
+ var index = this.context.programs.push('') - 1;
5455
5509
  child.index = index;
5456
5510
  child.name = 'program' + index;
5457
5511
  this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
@@ -5771,19 +5825,19 @@ return /******/ (function(modules) { // webpackBootstrap
5771
5825
  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
5772
5826
  };
5773
5827
 
5774
- function strictLookup(requireTerminal, compiler, parts, i, type) {
5828
+ function strictLookup(requireTerminal, compiler, parts, startPartIndex, type) {
5775
5829
  var stack = compiler.popStack(),
5776
5830
  len = parts.length;
5777
5831
  if (requireTerminal) {
5778
5832
  len--;
5779
5833
  }
5780
5834
 
5781
- for (; i < len; i++) {
5835
+ for (var i = startPartIndex; i < len; i++) {
5782
5836
  stack = compiler.nameLookup(stack, parts[i], type);
5783
5837
  }
5784
5838
 
5785
5839
  if (requireTerminal) {
5786
- return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];
5840
+ return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[len]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];
5787
5841
  } else {
5788
5842
  return stack;
5789
5843
  }
@@ -5793,7 +5847,7 @@ return /******/ (function(modules) { // webpackBootstrap
5793
5847
  module.exports = exports['default'];
5794
5848
 
5795
5849
  /***/ }),
5796
- /* 92 */
5850
+ /* 91 */
5797
5851
  /***/ (function(module, exports, __webpack_require__) {
5798
5852
 
5799
5853
  /* global define, require */
@@ -1,7 +1,7 @@
1
1
  /**!
2
2
 
3
3
  @license
4
- handlebars v4.7.8
4
+ handlebars v4.7.9
5
5
 
6
6
  Copyright (C) 2011-2019 by Yehuda Katz
7
7
 
@@ -95,7 +95,7 @@ return /******/ (function(modules) { // webpackBootstrap
95
95
  // Each of these augment the Handlebars object. No need to setup here.
96
96
  // (This is done to easily share code between commonjs and browse envs)
97
97
 
98
- var _handlebarsSafeString = __webpack_require__(76);
98
+ var _handlebarsSafeString = __webpack_require__(75);
99
99
 
100
100
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
101
101
 
@@ -107,11 +107,11 @@ return /******/ (function(modules) { // webpackBootstrap
107
107
 
108
108
  var Utils = _interopRequireWildcard(_handlebarsUtils);
109
109
 
110
- var _handlebarsRuntime = __webpack_require__(77);
110
+ var _handlebarsRuntime = __webpack_require__(76);
111
111
 
112
112
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
113
113
 
114
- var _handlebarsNoConflict = __webpack_require__(82);
114
+ var _handlebarsNoConflict = __webpack_require__(81);
115
115
 
116
116
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
117
117
 
@@ -209,7 +209,7 @@ return /******/ (function(modules) { // webpackBootstrap
209
209
 
210
210
  var _internalProtoAccess = __webpack_require__(72);
211
211
 
212
- var VERSION = '4.7.8';
212
+ var VERSION = '4.7.9';
213
213
  exports.VERSION = VERSION;
214
214
  var COMPILER_REVISION = 8;
215
215
  exports.COMPILER_REVISION = COMPILER_REVISION;
@@ -586,7 +586,8 @@ return /******/ (function(modules) { // webpackBootstrap
586
586
  if (instance.helpers[helperName]) {
587
587
  instance.hooks[helperName] = instance.helpers[helperName];
588
588
  if (!keepHelper) {
589
- delete instance.helpers[helperName];
589
+ // Using delete is slow
590
+ instance.helpers[helperName] = undefined;
590
591
  }
591
592
  }
592
593
  }
@@ -1972,7 +1973,7 @@ return /******/ (function(modules) { // webpackBootstrap
1972
1973
  exports.resultIsAllowed = resultIsAllowed;
1973
1974
  exports.resetLoggedProperties = resetLoggedProperties;
1974
1975
 
1975
- var _createNewLookupObject = __webpack_require__(75);
1976
+ var _utils = __webpack_require__(4);
1976
1977
 
1977
1978
  var _logger = __webpack_require__(71);
1978
1979
 
@@ -1981,23 +1982,28 @@ return /******/ (function(modules) { // webpackBootstrap
1981
1982
  var loggedProperties = _Object$create(null);
1982
1983
 
1983
1984
  function createProtoAccessControl(runtimeOptions) {
1984
- var defaultMethodWhiteList = _Object$create(null);
1985
- defaultMethodWhiteList['constructor'] = false;
1986
- defaultMethodWhiteList['__defineGetter__'] = false;
1987
- defaultMethodWhiteList['__defineSetter__'] = false;
1988
- defaultMethodWhiteList['__lookupGetter__'] = false;
1989
-
1990
- var defaultPropertyWhiteList = _Object$create(null);
1985
+ // Create an object with "null"-prototype to avoid truthy results on
1986
+ // prototype properties.
1987
+ var propertyWhiteList = _Object$create(null);
1991
1988
  // eslint-disable-next-line no-proto
1992
- defaultPropertyWhiteList['__proto__'] = false;
1989
+ propertyWhiteList['__proto__'] = false;
1990
+ _utils.extend(propertyWhiteList, runtimeOptions.allowedProtoProperties);
1991
+
1992
+ var methodWhiteList = _Object$create(null);
1993
+ methodWhiteList['constructor'] = false;
1994
+ methodWhiteList['__defineGetter__'] = false;
1995
+ methodWhiteList['__defineSetter__'] = false;
1996
+ methodWhiteList['__lookupGetter__'] = false;
1997
+ methodWhiteList['__lookupSetter__'] = false;
1998
+ _utils.extend(methodWhiteList, runtimeOptions.allowedProtoMethods);
1993
1999
 
1994
2000
  return {
1995
2001
  properties: {
1996
- whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
2002
+ whitelist: propertyWhiteList,
1997
2003
  defaultValue: runtimeOptions.allowProtoPropertiesByDefault
1998
2004
  },
1999
2005
  methods: {
2000
- whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
2006
+ whitelist: methodWhiteList,
2001
2007
  defaultValue: runtimeOptions.allowProtoMethodsByDefault
2002
2008
  }
2003
2009
  };
@@ -2052,34 +2058,6 @@ return /******/ (function(modules) { // webpackBootstrap
2052
2058
 
2053
2059
  /***/ }),
2054
2060
  /* 75 */
2055
- /***/ (function(module, exports, __webpack_require__) {
2056
-
2057
- 'use strict';
2058
-
2059
- var _Object$create = __webpack_require__(73)['default'];
2060
-
2061
- exports.__esModule = true;
2062
- exports.createNewLookupObject = createNewLookupObject;
2063
-
2064
- var _utils = __webpack_require__(4);
2065
-
2066
- /**
2067
- * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
2068
- * The resulting object can be used with "object[property]" to check if a property exists
2069
- * @param {...object} sources a varargs parameter of source objects that will be merged
2070
- * @returns {object}
2071
- */
2072
-
2073
- function createNewLookupObject() {
2074
- for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
2075
- sources[_key] = arguments[_key];
2076
- }
2077
-
2078
- return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));
2079
- }
2080
-
2081
- /***/ }),
2082
- /* 76 */
2083
2061
  /***/ (function(module, exports) {
2084
2062
 
2085
2063
  // Build out our basic SafeString type
@@ -2098,12 +2076,12 @@ return /******/ (function(modules) { // webpackBootstrap
2098
2076
  module.exports = exports['default'];
2099
2077
 
2100
2078
  /***/ }),
2101
- /* 77 */
2079
+ /* 76 */
2102
2080
  /***/ (function(module, exports, __webpack_require__) {
2103
2081
 
2104
2082
  'use strict';
2105
2083
 
2106
- var _Object$seal = __webpack_require__(78)['default'];
2084
+ var _Object$seal = __webpack_require__(77)['default'];
2107
2085
 
2108
2086
  var _Object$keys = __webpack_require__(59)['default'];
2109
2087
 
@@ -2131,7 +2109,7 @@ return /******/ (function(modules) { // webpackBootstrap
2131
2109
 
2132
2110
  var _helpers = __webpack_require__(9);
2133
2111
 
2134
- var _internalWrapHelper = __webpack_require__(81);
2112
+ var _internalWrapHelper = __webpack_require__(80);
2135
2113
 
2136
2114
  var _internalProtoAccess = __webpack_require__(72);
2137
2115
 
@@ -2180,16 +2158,14 @@ return /******/ (function(modules) { // webpackBootstrap
2180
2158
  }
2181
2159
  partial = env.VM.resolvePartial.call(this, partial, context, options);
2182
2160
 
2183
- var extendedOptions = Utils.extend({}, options, {
2184
- hooks: this.hooks,
2185
- protoAccessControl: this.protoAccessControl
2186
- });
2161
+ options.hooks = this.hooks;
2162
+ options.protoAccessControl = this.protoAccessControl;
2187
2163
 
2188
- var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
2164
+ var result = env.VM.invokePartial.call(this, partial, context, options);
2189
2165
 
2190
2166
  if (result == null && env.compile) {
2191
2167
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
2192
- result = options.partials[options.name](context, extendedOptions);
2168
+ result = options.partials[options.name](context, options);
2193
2169
  }
2194
2170
  if (result != null) {
2195
2171
  if (options.indent) {
@@ -2238,7 +2214,7 @@ return /******/ (function(modules) { // webpackBootstrap
2238
2214
  for (var i = 0; i < len; i++) {
2239
2215
  var result = depths[i] && container.lookupProperty(depths[i], name);
2240
2216
  if (result != null) {
2241
- return depths[i][name];
2217
+ return result;
2242
2218
  }
2243
2219
  }
2244
2220
  },
@@ -2320,8 +2296,9 @@ return /******/ (function(modules) { // webpackBootstrap
2320
2296
 
2321
2297
  ret._setup = function (options) {
2322
2298
  if (!options.partial) {
2323
- var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
2324
- wrapHelpersToPassLookupProperty(mergedHelpers, container);
2299
+ var mergedHelpers = {};
2300
+ addHelpers(mergedHelpers, env.helpers, container);
2301
+ addHelpers(mergedHelpers, options.helpers, container);
2325
2302
  container.helpers = mergedHelpers;
2326
2303
 
2327
2304
  if (templateSpec.usePartial) {
@@ -2387,21 +2364,21 @@ return /******/ (function(modules) { // webpackBootstrap
2387
2364
  function resolvePartial(partial, context, options) {
2388
2365
  if (!partial) {
2389
2366
  if (options.name === '@partial-block') {
2390
- partial = options.data['partial-block'];
2367
+ partial = lookupOwnProperty(options.data, 'partial-block');
2391
2368
  } else {
2392
- partial = options.partials[options.name];
2369
+ partial = lookupOwnProperty(options.partials, options.name);
2393
2370
  }
2394
2371
  } else if (!partial.call && !options.name) {
2395
2372
  // This is a dynamic partial that returned a string
2396
2373
  options.name = partial;
2397
- partial = options.partials[partial];
2374
+ partial = lookupOwnProperty(options.partials, partial);
2398
2375
  }
2399
2376
  return partial;
2400
2377
  }
2401
2378
 
2402
2379
  function invokePartial(partial, context, options) {
2403
2380
  // Use the current closure context to save the partial-block if this partial
2404
- var currentPartialBlock = options.data && options.data['partial-block'];
2381
+ var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block');
2405
2382
  options.partial = true;
2406
2383
  if (options.ids) {
2407
2384
  options.data.contextPath = options.ids[0] || options.data.contextPath;
@@ -2443,6 +2420,12 @@ return /******/ (function(modules) { // webpackBootstrap
2443
2420
  return '';
2444
2421
  }
2445
2422
 
2423
+ function lookupOwnProperty(obj, name) {
2424
+ if (obj && Object.prototype.hasOwnProperty.call(obj, name)) {
2425
+ return obj[name];
2426
+ }
2427
+ }
2428
+
2446
2429
  function initData(context, data) {
2447
2430
  if (!data || !('root' in data)) {
2448
2431
  data = data ? _base.createFrame(data) : {};
@@ -2460,9 +2443,10 @@ return /******/ (function(modules) { // webpackBootstrap
2460
2443
  return prog;
2461
2444
  }
2462
2445
 
2463
- function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
2464
- _Object$keys(mergedHelpers).forEach(function (helperName) {
2465
- var helper = mergedHelpers[helperName];
2446
+ function addHelpers(mergedHelpers, helpers, container) {
2447
+ if (!helpers) return;
2448
+ _Object$keys(helpers).forEach(function (helperName) {
2449
+ var helper = helpers[helperName];
2466
2450
  mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
2467
2451
  });
2468
2452
  }
@@ -2470,25 +2454,26 @@ return /******/ (function(modules) { // webpackBootstrap
2470
2454
  function passLookupPropertyOption(helper, container) {
2471
2455
  var lookupProperty = container.lookupProperty;
2472
2456
  return _internalWrapHelper.wrapHelper(helper, function (options) {
2473
- return Utils.extend({ lookupProperty: lookupProperty }, options);
2457
+ options.lookupProperty = lookupProperty;
2458
+ return options;
2474
2459
  });
2475
2460
  }
2476
2461
 
2477
2462
  /***/ }),
2478
- /* 78 */
2463
+ /* 77 */
2479
2464
  /***/ (function(module, exports, __webpack_require__) {
2480
2465
 
2481
- module.exports = { "default": __webpack_require__(79), __esModule: true };
2466
+ module.exports = { "default": __webpack_require__(78), __esModule: true };
2482
2467
 
2483
2468
  /***/ }),
2484
- /* 79 */
2469
+ /* 78 */
2485
2470
  /***/ (function(module, exports, __webpack_require__) {
2486
2471
 
2487
- __webpack_require__(80);
2472
+ __webpack_require__(79);
2488
2473
  module.exports = __webpack_require__(20).Object.seal;
2489
2474
 
2490
2475
  /***/ }),
2491
- /* 80 */
2476
+ /* 79 */
2492
2477
  /***/ (function(module, exports, __webpack_require__) {
2493
2478
 
2494
2479
  // 19.1.2.17 Object.seal(O)
@@ -2501,7 +2486,7 @@ return /******/ (function(modules) { // webpackBootstrap
2501
2486
  });
2502
2487
 
2503
2488
  /***/ }),
2504
- /* 81 */
2489
+ /* 80 */
2505
2490
  /***/ (function(module, exports) {
2506
2491
 
2507
2492
  'use strict';
@@ -2524,7 +2509,7 @@ return /******/ (function(modules) { // webpackBootstrap
2524
2509
  }
2525
2510
 
2526
2511
  /***/ }),
2527
- /* 82 */
2512
+ /* 81 */
2528
2513
  /***/ (function(module, exports) {
2529
2514
 
2530
2515
  /* global globalThis */
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebars-source
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.8
4
+ version: 4.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yehuda Katz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-02 00:00:00.000000000 Z
11
+ date: 2026-03-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Handlebars.js source code wrapper for (pre)compilation gems.
14
14
  email:
@@ -39,7 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  requirements: []
42
- rubygems_version: 3.4.10
42
+ rubygems_version: 3.4.19
43
43
  signing_key:
44
44
  specification_version: 4
45
45
  summary: Handlebars.js source code wrapper