Repository: nifi Updated Branches: refs/heads/master 78c4e223f -> 5d3558a79
NIFI-5633 - allDelineatedValues can throw ArrayIndexOutOfBoundsException This closes #3029. Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/5d3558a7 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/5d3558a7 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/5d3558a7 Branch: refs/heads/master Commit: 5d3558a79d83defb4dd7484da3303cb04013cc6c Parents: 78c4e22 Author: Pierre Villard <[email protected]> Authored: Tue Sep 25 14:57:49 2018 +0200 Committer: Mark Payne <[email protected]> Committed: Tue Sep 25 14:07:00 2018 -0400 ---------------------------------------------------------------------- .../selection/DelineatedAttributeEvaluator.java | 2 +- .../expression/language/TestQuery.java | 31 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/5d3558a7/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java index e39d01c..44a3d55 100644 --- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java @@ -55,7 +55,7 @@ public class DelineatedAttributeEvaluator extends MultiAttributeEvaluator { delineatedValues = subjectValue.getValue().split(delimiterValue.getValue()); } - if (evaluationCount > delineatedValues.length) { + if (evaluationCount > delineatedValues.length || delineatedValues.length == 0) { evaluationsLeft = 0; return new StringQueryResult(null); } http://git-wip-us.apache.org/repos/asf/nifi/blob/5d3558a7/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java b/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java index 7fd8747..2a43bdc 100644 --- a/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java +++ b/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java @@ -1015,6 +1015,37 @@ public class TestQuery { } @Test + public void testAllDelineatedValuesCount() { + final Map<String, String> attributes = new HashMap<>(); + + final String query = "${allDelineatedValues('${test}', '/'):count()}"; + + attributes.put("test", "/my/path"); + assertEquals(ResultType.WHOLE_NUMBER, Query.getResultType(query)); + assertEquals("3", Query.evaluateExpressions(query, attributes, null)); + assertEquals("", Query.evaluateExpressions("${test:getDelimitedField(1, '/')}", attributes, null)); + assertEquals("my", Query.evaluateExpressions("${test:getDelimitedField(2, '/')}", attributes, null)); + assertEquals("path", Query.evaluateExpressions("${test:getDelimitedField(3, '/')}", attributes, null)); + + attributes.put("test", "this/is/my/path"); + assertEquals(ResultType.WHOLE_NUMBER, Query.getResultType(query)); + assertEquals("4", Query.evaluateExpressions(query, attributes, null)); + assertEquals("this", Query.evaluateExpressions("${test:getDelimitedField(1, '/')}", attributes, null)); + assertEquals("is", Query.evaluateExpressions("${test:getDelimitedField(2, '/')}", attributes, null)); + assertEquals("my", Query.evaluateExpressions("${test:getDelimitedField(3, '/')}", attributes, null)); + assertEquals("path", Query.evaluateExpressions("${test:getDelimitedField(4, '/')}", attributes, null)); + + attributes.put("test", "/"); + assertEquals(ResultType.WHOLE_NUMBER, Query.getResultType(query)); + assertEquals("0", Query.evaluateExpressions(query, attributes, null)); + + attributes.put("test", "path/"); + assertEquals(ResultType.WHOLE_NUMBER, Query.getResultType(query)); + assertEquals("1", Query.evaluateExpressions(query, attributes, null)); + assertEquals("path", Query.evaluateExpressions("${test:getDelimitedField(1, '/')}", attributes, null)); + } + + @Test public void testAllAttributes() { final Map<String, String> attributes = new HashMap<>(); attributes.put("abc", "1234");
