Repository: nifi
Updated Branches:
  refs/heads/master 4fe7cb33e -> c6106d1d8


NIFI-5525 - CSVRecordReader fails with StringIndexOutOfBoundsException when 
field is a double quote

review

Signed-off-by: Matthew Burgess <[email protected]>

This closes #3092


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/c6106d1d
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/c6106d1d
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/c6106d1d

Branch: refs/heads/master
Commit: c6106d1d885598dcc16dd0420112f6624e5685da
Parents: 4fe7cb3
Author: Pierre Villard <[email protected]>
Authored: Fri Oct 19 10:44:00 2018 +0200
Committer: Matthew Burgess <[email protected]>
Committed: Mon Oct 22 16:58:36 2018 -0400

----------------------------------------------------------------------
 .../java/org/apache/nifi/csv/AbstractCSVRecordReader.java   | 9 ++++++---
 .../test/java/org/apache/nifi/csv/TestCSVRecordReader.java  | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/c6106d1d/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 62ddc81..746b1ce 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
@@ -17,7 +17,6 @@
 
 package org.apache.nifi.csv;
 
-
 import org.apache.nifi.logging.ComponentLog;
 import org.apache.nifi.serialization.RecordReader;
 import org.apache.nifi.serialization.record.DataType;
@@ -79,7 +78,7 @@ abstract public class AbstractCSVRecordReader implements 
RecordReader {
             return value;
         }
 
-        final String trimmed = value.startsWith("\"") && value.endsWith("\"") 
&& (value.length() > 1) ? value.substring(1, value.length() - 1) : value;
+        final String trimmed = trim(value);
         if (trimmed.isEmpty()) {
             return null;
         }
@@ -92,7 +91,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 = trim(value);
         if (trimmed.isEmpty()) {
             return null;
         }
@@ -132,6 +131,10 @@ abstract public class AbstractCSVRecordReader implements 
RecordReader {
         return value;
     }
 
+    private String trim(String value) {
+        return (value.length() > 1) && value.startsWith("\"") && 
value.endsWith("\"") ? value.substring(1, value.length() - 1) : value;
+    }
+
     @Override
     public RecordSchema getSchema() {
         return schema;

http://git-wip-us.apache.org/repos/asf/nifi/blob/c6106d1d/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 5095767..7ddcc29 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
@@ -597,7 +597,7 @@ public class TestCSVRecordReader {
     @Test
     public void testQuote() throws IOException, MalformedRecordException {
         final CSVFormat format = 
CSVFormat.RFC4180.withFirstRecordAsHeader().withTrim().withQuote('"');
-        final String text = "\"name\"\n\"\"\"\"";
+        final String text = "\"name\"\n\"\"\"\"\n\"\"\"\"";
 
         final List<RecordField> fields = new ArrayList<>();
         fields.add(new RecordField("name", 
RecordFieldType.STRING.getDataType()));
@@ -607,9 +607,12 @@ public class TestCSVRecordReader {
              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");
+            Record record = reader.nextRecord();
+            String name = (String)record.getValue("name");
+            assertEquals("\"", name);
 
+            record = reader.nextRecord(false, false);
+            name = (String)record.getValue("name");
             assertEquals("\"", name);
         }
     }

Reply via email to