From 28acf1138b64c889a520c190464ad1d16862dd41 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Sep 2024 12:30:15 -0400 Subject: [PATCH] CSVFormat does not support explicit " as escape char --- src/changes/changes.xml | 1 + .../java/org/apache/commons/csv/Lexer.java | 18 ++++++------------ .../commons/csv/issues/JiraCsv150Test.java | 2 -- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 1fdf448e..e1cb2553 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -50,6 +50,7 @@ Migrate CSVFormat#print(File, Charset) to NIO #445. Fix documentation for CSVFormat private constructor #466. CSVFormat does not support explicit " as escape char. + CSVFormat does not support explicit " as escape char. Bump commons-codec:commons-codec from 1.16.1 to 1.17.1 #422, #449. Bump org.apache.commons:commons-parent from 69 to 74 #435, #452, #465, #468. diff --git a/src/main/java/org/apache/commons/csv/Lexer.java b/src/main/java/org/apache/commons/csv/Lexer.java index e2aec718..489166f7 100644 --- a/src/main/java/org/apache/commons/csv/Lexer.java +++ b/src/main/java/org/apache/commons/csv/Lexer.java @@ -32,19 +32,12 @@ final class Lexer implements Closeable { private static final String CR_STRING = Character.toString(Constants.CR); private static final String LF_STRING = Character.toString(Constants.LF); - /** - * Constant char to use for disabling comments, escapes, and encapsulation. The value -2 is used because it - * won't be confused with an EOF signal (-1), and because the Unicode value {@code FFFE} would be encoded as two - * chars (using surrogates) and thus there should never be a collision with a real text char. - */ - private static final char DISABLED = '\ufffe'; - private final char[] delimiter; private final char[] delimiterBuf; private final char[] escapeDelimiterBuf; - private final char escape; - private final char quoteChar; - private final char commentStart; + private final int escape; + private final int quoteChar; + private final int commentStart; private final boolean ignoreSurroundingSpaces; private final boolean ignoreEmptyLines; private final boolean lenientEof; @@ -197,8 +190,8 @@ final class Lexer implements Closeable { return ch == Constants.LF || ch == Constants.CR || ch == Constants.UNDEFINED; } - private char mapNullToDisabled(final Character c) { - return c == null ? DISABLED : c.charValue(); // N.B. Explicit (un)boxing is intentional + private int mapNullToDisabled(final Character c) { + return c == null ? -1 : c.charValue(); // Explicit unboxing is intentional } /** @@ -512,4 +505,5 @@ final class Lexer implements Closeable { buffer.setLength(length); } } + } diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java index 415fe296..1ede9f23 100644 --- a/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java +++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv150Test.java @@ -23,10 +23,8 @@ import java.io.StringReader; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -@Disabled public class JiraCsv150Test { private void testDisable(final CSVFormat csvFormat, final StringReader stringReader) throws IOException {