You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2019/04/03 20:12:22 UTC

[nifi] 04/17: NIFI-6127: Fixed NPE in match() and find() EL functions when attribute doesn't exist

This is an automated email from the ASF dual-hosted git repository.

joewitt pushed a commit to branch NIFI-6169-RC2
in repository https://gitbox.apache.org/repos/asf/nifi.git

commit 5231bf3a72b8c46e5091f40ed4b6727c360dddf6
Author: Matthew Burgess <ma...@apache.org>
AuthorDate: Tue Mar 19 14:03:57 2019 -0400

    NIFI-6127: Fixed NPE in match() and find() EL functions when attribute doesn't exist
    
    This closes #3378.
    
    Signed-off-by: Koji Kawamura <ij...@apache.org>
---
 .../expression/language/evaluation/functions/FindEvaluator.java     | 6 +++++-
 .../expression/language/evaluation/functions/MatchesEvaluator.java  | 6 +++++-
 .../org/apache/nifi/attribute/expression/language/TestQuery.java    | 6 ++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/FindEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/FindEvaluator.java
index 2a3f1ae..fa2aaf5 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/FindEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/FindEvaluator.java
@@ -53,7 +53,11 @@ public class FindEvaluator extends BooleanEvaluator {
         }
         final Pattern pattern;
         if (compiledPattern == null) {
-            pattern = Pattern.compile(search.evaluate(attributes).getValue());
+            String expression = search.evaluate(attributes).getValue();
+            if (expression == null) {
+                return new BooleanQueryResult(false);
+            }
+            pattern = Pattern.compile(expression);
         } else {
             pattern = compiledPattern;
         }
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MatchesEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MatchesEvaluator.java
index 6f017ea..d238938 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MatchesEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MatchesEvaluator.java
@@ -53,7 +53,11 @@ public class MatchesEvaluator extends BooleanEvaluator {
         }
         final Pattern pattern;
         if (compiledPattern == null) {
-            pattern = Pattern.compile(search.evaluate(attributes).getValue());
+            String expression = search.evaluate(attributes).getValue();
+            if (expression == null) {
+                return new BooleanQueryResult(false);
+            }
+            pattern = Pattern.compile(expression);
         } else {
             pattern = compiledPattern;
         }
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 67e5b51..1c679a4 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
@@ -1324,6 +1324,9 @@ public class TestQuery {
         assertEquals("false", secondEvaluation);
 
         verifyEquals("${dotted:matches('abc\\.xyz')}", attributes, true);
+
+        // Test for matches(null)
+        assertEquals("false", Query.evaluateExpressions("${abc:matches(${not.here})}", attributes, null));
     }
 
     @Test
@@ -1344,6 +1347,9 @@ public class TestQuery {
         assertEquals("false", secondEvaluation);
 
         verifyEquals("${dotted:find('\\.')}", attributes, true);
+
+        // Test for find(null)
+        assertEquals("false", Query.evaluateExpressions("${abc:find(${not.here})}", attributes, null));
     }
 
     @Test