From cc37085d1e6a68d11f0083841c60caeac3cca754 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Fri, 31 Jan 2025 14:07:05 -0800 Subject: [PATCH] Don't throw exception when casing fail in JavaScript evaluator (#17436) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --------- Co-authored-by: Sébastien Ros --- .../JavaScriptWorkflowScriptEvaluator.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs index 3994cb84d0e..921fb6a81f9 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs @@ -30,13 +30,24 @@ public async Task EvaluateAsync(WorkflowExpression expression, Workflow return default; } - var workflowType = workflowContext.WorkflowType; - var directive = $"js:{expression}"; - var expressionContext = new WorkflowExecutionScriptContext(workflowContext); + try + { + var workflowType = workflowContext.WorkflowType; + var directive = $"js:{expression}"; + var expressionContext = new WorkflowExecutionScriptContext(workflowContext); + + await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingScriptAsync(expressionContext), expressionContext, _logger); - await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingScriptAsync(expressionContext), expressionContext, _logger); + var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders); + + // Some types cannot be cast (e.g., null to bool), so we need to catch the exception and return the default value. + return (T)_scriptingManager.Evaluate(directive, null, null, methodProviders); + } + catch (Exception ex) + { + _logger.LogError(ex, "An error occurred while evaluating the expression: {Expression}", expression.Expression); + } - var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders); - return (T)_scriptingManager.Evaluate(directive, null, null, methodProviders); + return default; } }