You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2018/08/16 18:24:06 UTC
nifi git commit: NIFI-5525: CSVRecordReader fails with
StringIndexOutOfBoundsException when field is a double quote
Repository: nifi
Updated Branches:
refs/heads/master 9d2b698c1 -> 410176ed2
NIFI-5525: CSVRecordReader fails with StringIndexOutOfBoundsException when field is a double quote
This closes #2953.
Signed-off-by: Mark Payne <ma...@hotmail.com>
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/410176ed
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/410176ed
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/410176ed
Branch: refs/heads/master
Commit: 410176ed226b4db44b08c13b9f70bb70107e73e4
Parents: 9d2b698
Author: Vadim Arshavsky <va...@ebay.com>
Authored: Thu Aug 16 17:25:38 2018 +0300
Committer: Mark Payne <ma...@hotmail.com>
Committed: Thu Aug 16 14:22:27 2018 -0400
----------------------------------------------------------------------
.../nifi/csv/AbstractCSVRecordReader.java | 2 +-
.../apache/nifi/csv/TestCSVRecordReader.java | 21 ++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/410176ed/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/AbstractCSVRecordReader.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/AbstractCSVRecordReader.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/AbstractCSVRecordReader.java
index 5bfbf42..62ddc81 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/AbstractCSVRecordReader.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/AbstractCSVRecordReader.java
@@ -79,7 +79,7 @@ abstract public class AbstractCSVRecordReader implements RecordReader {
return value;
}
- final String trimmed = value.startsWith("\"") && value.endsWith("\"") ? value.substring(1, value.length() - 1) : value;
+ final String trimmed = value.startsWith("\"") && value.endsWith("\"") && (value.length() > 1) ? value.substring(1, value.length() - 1) : value;
if (trimmed.isEmpty()) {
return null;
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/410176ed/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
index e38d7fd..a4415b7 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
@@ -593,4 +593,25 @@ public class TestCSVRecordReader {
assertNull(reader.nextRecord());
}
}
+
+ @Test
+ public void testQuote() throws IOException, MalformedRecordException {
+ final CSVFormat format = CSVFormat.RFC4180.withFirstRecordAsHeader().withTrim().withQuote('"');
+ final String text = "\"name\"\n\"\"\"\"";
+
+ final List<RecordField> fields = new ArrayList<>();
+ fields.add(new RecordField("name", RecordFieldType.STRING.getDataType()));
+ final RecordSchema schema = new SimpleRecordSchema(fields);
+
+ try (final InputStream bais = new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8));
+ final CSVRecordReader reader = new CSVRecordReader(bais, Mockito.mock(ComponentLog.class), schema, format, true, false,
+ RecordFieldType.DATE.getDefaultFormat(), RecordFieldType.TIME.getDefaultFormat(), RecordFieldType.TIMESTAMP.getDefaultFormat(), StandardCharsets.UTF_8.name())) {
+
+ final Record record = reader.nextRecord();
+ final String name = (String)record.getValue("name");
+
+ assertEquals("\"", name);
+ }
+ }
+
}