From 25312b3e3218c1002c483a1fc995d2b65509b993 Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Sun, 4 Sep 2022 16:23:49 +0100 Subject: [PATCH] Refactor filter recursion detection to avoid an unneeded wrapper function --- core/modules/filters.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/core/modules/filters.js b/core/modules/filters.js index 10043196f..1154d824c 100644 --- a/core/modules/filters.js +++ b/core/modules/filters.js @@ -340,22 +340,17 @@ exports.compileFilter = function(filterString) { widget = $tw.rootWidget; } var results = new $tw.utils.LinkedList(); - $tw.utils.each(operationFunctions,function(operationFunction) { - operationFunction(results,source,widget); - }); - return results.toArray(); - }); - var fnGuarded = function(source,widget) { - var results; self.filterRecursionCount = (self.filterRecursionCount || 0) + 1; if(self.filterRecursionCount < 300) { - results = fnMeasured(source,widget); + $tw.utils.each(operationFunctions,function(operationFunction) { + operationFunction(results,source,widget); + }); } else { results = ["/**-- Excessive filter recursion --**/"]; } self.filterRecursionCount = self.filterRecursionCount - 1; - return results; - }; + return results.toArray(); + }); if(this.filterCacheCount >= 2000) { // To prevent memory leak, we maintain an upper limit for cache size. // Reset if exceeded. This should give us 95% of the benefit @@ -363,9 +358,9 @@ exports.compileFilter = function(filterString) { this.filterCache = Object.create(null); this.filterCacheCount = 0; } - this.filterCache[filterString] = fnGuarded; + this.filterCache[filterString] = fnMeasured; this.filterCacheCount++; - return fnGuarded; + return fnMeasured; }; })();