From 014b4e1211a01e770f52740e359fa232c0608987 Mon Sep 17 00:00:00 2001 From: Maciej Barelkowski Date: Wed, 24 Sep 2025 10:54:44 +0200 Subject: [PATCH 1/2] fix: do not try to find unresolved variables of a broken expression Closes #50 --- CHANGELOG.md | 4 +++ lib/zeebe/util/feelUtility.js | 9 +++-- .../zeebe/long-broken-expression.bpmn | 33 +++++++++++++++++++ test/spec/zeebe/ZeebeVariableResolver.spec.js | 32 ++++++++++++++++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/zeebe/long-broken-expression.bpmn diff --git a/CHANGELOG.md b/CHANGELOG.md index d06a5a4..e23b748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ All notable changes to [@bpmn-io/variable-resolver](https://github.com/bpmn-io/v ___Note:__ Yet to be released changes appear here._ +## 1.3.5 + +* `FIX`: do not try to find unresolved variables of a broken expression ([#50](https://github.com/bpmn-io/variable-resolver/issues/50)) + ## 1.3.4 * `FIX`: preserve variables with same name but different scopes ([#56](https://github.com/bpmn-io/variable-resolver/pull/56)) diff --git a/lib/zeebe/util/feelUtility.js b/lib/zeebe/util/feelUtility.js index 697341f..90e7c12 100644 --- a/lib/zeebe/util/feelUtility.js +++ b/lib/zeebe/util/feelUtility.js @@ -141,10 +141,15 @@ export function getResultContext(expression, variables = {}) { }); const contextualParser = parser.configure({ - contextTracker: customContextTracker + contextTracker: customContextTracker, + strict: true }); - contextualParser.parse(expression); + try { + contextualParser.parse(expression); + } catch (error) { + return latestVariables; + } return latestVariables; } diff --git a/test/fixtures/zeebe/long-broken-expression.bpmn b/test/fixtures/zeebe/long-broken-expression.bpmn new file mode 100644 index 0000000..fadd8da --- /dev/null +++ b/test/fixtures/zeebe/long-broken-expression.bpmn @@ -0,0 +1,33 @@ + + + + + + + + + + + Flow_1imcl82 + + + + Flow_1imcl82 + + + + + + + + + + + + + + + + + + diff --git a/test/spec/zeebe/ZeebeVariableResolver.spec.js b/test/spec/zeebe/ZeebeVariableResolver.spec.js index b797f0d..60f0de5 100644 --- a/test/spec/zeebe/ZeebeVariableResolver.spec.js +++ b/test/spec/zeebe/ZeebeVariableResolver.spec.js @@ -13,6 +13,7 @@ import emptyXML from 'test/fixtures/zeebe/empty.bpmn'; import complexXML from 'test/fixtures/zeebe/complex.bpmn'; import connectorsXML from 'test/fixtures/zeebe/connectors.bpmn'; import ioMappingsXML from 'test/fixtures/zeebe/ioMappings.bpmn'; +import longBrokenExpressionXML from 'test/fixtures/zeebe/long-broken-expression.bpmn'; import VariableProvider from 'lib/VariableProvider'; import { getInputOutput } from '../../../lib/base/util/ExtensionElementsUtil'; @@ -1039,6 +1040,37 @@ describe('ZeebeVariableResolver', function() { }); + + describe('parsing', function() { + + beforeEach(bootstrapModeler(longBrokenExpressionXML, { + container, + additionalModules: [ + ZeebeVariableResolverModule + ], + moddleExtensions: { + zeebe: ZeebeModdle + } + })); + + + it('should NOT error on a long broken expression', inject(async function(elementRegistry, variableResolver) { + + // given + const task = elementRegistry.get('Task_1'); + const bo = getBusinessObject(task); + const input = getInputOutput(bo).inputParameters[1]; + + // when + const variables = await variableResolver.getVariablesForElement(bo, input); + + // then + expect(variables).to.variableEqual([ + { name: 'target' } + ]); + })); + }); + }); // helpers ////////////////////// From 9f4d4518037bcd3645fb595e00c0a54cff27b271 Mon Sep 17 00:00:00 2001 From: Maciej Barelkowski <28307541+barmac@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:52:16 +0200 Subject: [PATCH 2/2] chore: add a comment Add error handling to bail out on parse failure --- lib/zeebe/util/feelUtility.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/zeebe/util/feelUtility.js b/lib/zeebe/util/feelUtility.js index 90e7c12..b42ecc5 100644 --- a/lib/zeebe/util/feelUtility.js +++ b/lib/zeebe/util/feelUtility.js @@ -148,6 +148,8 @@ export function getResultContext(expression, variables = {}) { try { contextualParser.parse(expression); } catch (error) { + + // bail out in case of an error return latestVariables; } @@ -429,4 +431,4 @@ export function getElementNamesToRemove(moddleElement, inputOutput) { } return namesToFilter; -} \ No newline at end of file +}