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());