You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ex...@apache.org on 2024/06/17 18:21:10 UTC
(nifi) branch main updated: NIFI-12704 Avoid NPE in escapeJson() for Root Path
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 a52d6a8214 NIFI-12704 Avoid NPE in escapeJson() for Root Path
a52d6a8214 is described below
commit a52d6a8214dc2b323ae238a87eb5fc7571de72cc
Author: EndzeitBegins <16...@users.noreply.github.com>
AuthorDate: Sun Feb 25 09:19:58 2024 +0100
NIFI-12704 Avoid NPE in escapeJson() for Root Path
This closes #8450
Signed-off-by: David Handermann <ex...@apache.org>
---
.../nifi/record/path/paths/RecordPathCompiler.java | 4 ++++
.../org/apache/nifi/record/path/TestRecordPath.java | 18 ++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/paths/RecordPathCompiler.java b/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/paths/RecordPathCompiler.java
index 200b8ccfa7..75377e6072 100644
--- a/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/paths/RecordPathCompiler.java
+++ b/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/paths/RecordPathCompiler.java
@@ -130,6 +130,10 @@ public class RecordPathCompiler {
return new RootPath();
}
case CHILD_REFERENCE: {
+ if (tree.getChildCount() == 0) {
+ return new RootPath();
+ }
+
final Tree childTree = tree.getChild(0);
if (childTree == null) {
return new RootPath();
diff --git a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
index 2513b92ee1..389c2755c6 100644
--- a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
+++ b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
@@ -2287,6 +2287,17 @@ public class TestRecordPath {
assertEquals(48, fieldValues.get(0).getValue());
}
+ @Test
+ public void testRecordRootReferenceInFunction() {
+ final Record record = createSimpleRecord();
+
+ final FieldValue singleArgumentFieldValue = evaluateSingleFieldValue("escapeJson(/)", record);
+ assertEquals("{\"id\":48,\"name\":\"John Doe\",\"missing\":null}", singleArgumentFieldValue.getValue());
+ final FieldValue multipleArgumentsFieldValue = evaluateSingleFieldValue("mapOf(\"copy\",/)", record);
+ assertInstanceOf(MapRecord.class, multipleArgumentsFieldValue.getValue());
+ assertEquals(record.toString(), ((MapRecord) multipleArgumentsFieldValue.getValue()).getValue("copy"));
+ }
+
private List<RecordField> getDefaultFields() {
final List<RecordField> fields = new ArrayList<>();
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
@@ -2339,4 +2350,11 @@ public class TestRecordPath {
return new MapRecord(schema, values);
}
+ private static FieldValue evaluateSingleFieldValue(RecordPath recordPath, Record record) {
+ return recordPath.evaluate(record).getSelectedFields().findFirst().get();
+ }
+
+ private static FieldValue evaluateSingleFieldValue(String path, Record record) {
+ return evaluateSingleFieldValue(RecordPath.compile(path), record);
+ }
}