diff --git a/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvReader.java b/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvReader.java index cb58abb..44ad20f 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvReader.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvReader.java @@ -563,10 +563,17 @@ public String nextString() throws IOException _textBuffer.resetWithString(""); return ""; } + char[] outBuf = _textBuffer.emptyAndGetCurrentSegment(); outBuf[0] = (char) i; int outPtr = 1; + if (i == _escapeChar) { + // Reset the escaped character + outBuf[0] = _unescape(); + return _nextUnquotedString(outBuf, outPtr); + } + int ptr = _inputPtr; if (ptr >= _inputEnd) { if (!loadMore()) { // ok to have end-of-input but... diff --git a/src/test/java/com/fasterxml/jackson/dataformat/csv/TestParserEscapes.java b/src/test/java/com/fasterxml/jackson/dataformat/csv/TestParserEscapes.java index 5b33870..0cb8d6d 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/csv/TestParserEscapes.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/csv/TestParserEscapes.java @@ -47,5 +47,16 @@ public void testSimpleEscapesInUnquoted() throws Exception assertEquals("abc\\def", result.id); assertEquals("Desc with\nlinefeed", result.desc); } - + + public void testEscapesAtStartInUnquoted() throws Exception + { + CsvMapper mapper = mapperForCsv(); + CsvSchema schema = mapper.schemaFor(Desc.class).withColumnSeparator('|').withEscapeChar('\\'); + final String id = "\\|abcdef"; // doubled for javac + final String desc = "Desc with\\\nlinefeed"; + String input = id+"|"+desc+"\n"; + Desc result = mapper.reader(schema).withType(Desc.class).readValue(input); + assertEquals("|abcdef", result.id); + assertEquals("Desc with\nlinefeed", result.desc); + } }