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

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 56f859f37f NIFI-13890 Fixed referencing components for quoted 
parameter names (#9411)
56f859f37f is described below

commit 56f859f37fca6f9eb549f0e4538921819a3b3f62
Author: Pierre Villard <[email protected]>
AuthorDate: Fri Oct 18 14:56:51 2024 +0200

    NIFI-13890 Fixed referencing components for quoted parameter names (#9411)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../org/apache/nifi/parameter/AbstractParameterParser.java | 14 +++++++++++++-
 .../TestExpressionLanguageAgnosticParameterParser.java     | 10 ++++++----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/AbstractParameterParser.java
 
b/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/AbstractParameterParser.java
index 2584bdccf1..a946bc4968 100644
--- 
a/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/AbstractParameterParser.java
+++ 
b/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/AbstractParameterParser.java
@@ -45,7 +45,19 @@ public abstract class AbstractParameterParser implements 
ParameterParser {
         final ParameterToken token;
         if (sequentialStartTags % 2 == 1) {
             final String parameterName = input.substring(startCharIndex + 
sequentialStartTags + 1, endCharIndex);
-            token = new StandardParameterReference(parameterName, startOffset, 
endCharIndex, referenceText);
+            if (parameterName.contains("'")) {
+                if (parameterName.startsWith("'") && 
parameterName.endsWith("'")) {
+                    final String parameterNameWithoutQuotes = 
parameterName.substring(1, parameterName.length() - 1);
+                    if (parameterNameWithoutQuotes.contains("'")) {
+                        return null;
+                    }
+                    token = new 
StandardParameterReference(parameterNameWithoutQuotes, startOffset, 
endCharIndex, referenceText);
+                } else {
+                    return null;
+                }
+            } else {
+                token = new StandardParameterReference(parameterName, 
startOffset, endCharIndex, referenceText);
+            }
         } else {
             token = new EscapedParameterReference(startOffset, endCharIndex, 
referenceText);
         }
diff --git 
a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java
 
b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java
index dd87de6988..47b0c53bad 100644
--- 
a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java
+++ 
b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java
@@ -164,8 +164,10 @@ public class TestExpressionLanguageAgnosticParameterParser 
{
     @Test
     public void testNonReferences() {
         final ParameterParser parameterParser = new 
ExpressionLanguageAgnosticParameterParser();
+        final String[] badReferences = new String[] {"#foo", "Some text #{blah 
foo", "#foo}", "#}foo{",
+                "#{'fo'o}", "#{'My'Param'}", "#f{oo}", "#", "##", "###", 
"####", "#####", "#{", "##{", "###{"};
 
-        for (final String input : new String[] {"#foo", "Some text #{blah 
foo", "#foo}", "#}foo{", "#f{oo}", "#", "##", "###", "####", "#####", "#{", 
"##{", "###{"}) {
+        for (final String input : badReferences) {
             assertEquals(0, 
parameterParser.parseTokens(input).toList().size());
         }
     }
@@ -180,7 +182,7 @@ public class TestExpressionLanguageAgnosticParameterParser {
     @Test
     public void testReferenceInsideAndOutsideExpressionLanguage() {
         final ParameterParser parameterParser = new 
ExpressionLanguageAgnosticParameterParser();
-        final List<ParameterToken> tokens = 
parameterParser.parseTokens("#{hello}${#{hello}:toUpper()}#{hello}").toList();
+        final List<ParameterToken> tokens = 
parameterParser.parseTokens("#{hello}${#{'hello'}:toUpper()}#{hello}").toList();
         assertEquals(3, tokens.size());
 
         for (final ParameterToken token : tokens) {
@@ -206,12 +208,12 @@ public class 
TestExpressionLanguageAgnosticParameterParser {
     @Test
     public void testMultipleReferencesSameExpression() {
         final ParameterParser parameterParser = new 
ExpressionLanguageAgnosticParameterParser();
-        final List<ParameterToken> tokens = 
parameterParser.parseTokens("${#{hello}:append(#{there})}").toList();
+        final List<ParameterToken> tokens = 
parameterParser.parseTokens("${#{'my parameter'}:append(#{there})}").toList();
         assertEquals(2, tokens.size());
 
         final ParameterToken firstToken = tokens.get(0);
         assertTrue(firstToken.isParameterReference());
-        assertEquals("hello", ((ParameterReference) 
firstToken).getParameterName());
+        assertEquals("my parameter", ((ParameterReference) 
firstToken).getParameterName());
 
         final ParameterToken secondToken = tokens.get(1);
         assertTrue(secondToken.isParameterReference());

Reply via email to