This is an automated email from the ASF dual-hosted git repository. joewitt pushed a commit to branch NIFI-6169-RC1 in repository https://gitbox.apache.org/repos/asf/nifi.git
commit eedeb8beaf425c0262dbfbd753dd79c7d2c24c74 Author: Matthew Burgess <[email protected]> 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 <[email protected]> --- .../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
