You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2018/09/25 18:07:37 UTC

nifi git commit: NIFI-5633 - allDelineatedValues can throw ArrayIndexOutOfBoundsException

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 <pi...@gmail.com>
Authored: Tue Sep 25 14:57:49 2018 +0200
Committer: Mark Payne <ma...@hotmail.com>
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");