From e882593cea0957dbae8394674449a79606154a6d Mon Sep 17 00:00:00 2001 From: fwcd Date: Wed, 2 Sep 2020 19:44:13 +0200 Subject: [PATCH] Limit amount of scanned objects in generic evaluator --- .../EvaluationEngine/GenericEvaluationEngine.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/extension/src/EvaluationWatchService/EvaluationEngine/GenericEvaluationEngine.ts b/extension/src/EvaluationWatchService/EvaluationEngine/GenericEvaluationEngine.ts index 4b30d32..980e199 100644 --- a/extension/src/EvaluationWatchService/EvaluationEngine/GenericEvaluationEngine.ts +++ b/extension/src/EvaluationWatchService/EvaluationEngine/GenericEvaluationEngine.ts @@ -120,18 +120,21 @@ export class GenericEvaluator implements Evaluator { variablesReference: number, knownObjects: { [ref: number]: any; } = {}, recursionDepth: number = 0, - maxRecursionDepth: number = 50, + maxRecursionDepth: number = 30, + maxKnownObjects: number = 100, ): Promise { var result: any = {}; knownObjects[variablesReference] = result; + const canRecurse = recursionDepth < maxRecursionDepth && Object.keys(knownObjects).length < maxKnownObjects; + for (const variable of await this.session.getVariables({ variablesReference })) { let child: any; if (variable.variablesReference > 0 && variable.variablesReference in knownObjects) { // If the object is known, we have a (potentially cyclic) reference child = knownObjects[variable.variablesReference]; - } else if (variable.variablesReference > 0 && recursionDepth < maxRecursionDepth) { + } else if (variable.variablesReference > 0 && canRecurse) { // Recurse on a new object child = await this.constructObjectFromVariablesReference(variable.variablesReference, knownObjects, recursionDepth + 1, maxRecursionDepth); } else {