This is an automated email from the ASF dual-hosted git repository.
garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git
The following commit(s) were added to refs/heads/master by this push:
new e2eb7d1a Fix StringIndexOutOfBoundsException in CsvUnescaper on lone
quote (#748)
e2eb7d1a is described below
commit e2eb7d1afddca1fac6f55a125bdf2cd007bda589
Author: Javid Khan <[email protected]>
AuthorDate: Wed Jun 3 01:05:29 2026 +0530
Fix StringIndexOutOfBoundsException in CsvUnescaper on lone quote (#748)
* fix StringIndexOutOfBoundsException in CsvUnescaper on lone quote
* Fix comment.
---------
Co-authored-by: Gary Gregory <[email protected]>
---
.../java/org/apache/commons/text/translate/CsvTranslators.java | 4 ++--
.../org/apache/commons/text/translate/CsvTranslatorsTest.java | 10 ++++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git
a/src/main/java/org/apache/commons/text/translate/CsvTranslators.java
b/src/main/java/org/apache/commons/text/translate/CsvTranslators.java
index b116e50e..345ecda3 100644
--- a/src/main/java/org/apache/commons/text/translate/CsvTranslators.java
+++ b/src/main/java/org/apache/commons/text/translate/CsvTranslators.java
@@ -74,8 +74,8 @@ public final class CsvTranslators {
@Override
void translateWhole(final CharSequence input, final Writer writer)
throws IOException {
- // is input not quoted?
- if (input.charAt(0) != CSV_QUOTE || input.charAt(input.length() -
1) != CSV_QUOTE) {
+ // Is input not quoted? A single character cannot be wrapped in a
leading and trailing quote.
+ if (input.length() < 2 || input.charAt(0) != CSV_QUOTE ||
input.charAt(input.length() - 1) != CSV_QUOTE) {
writer.write(input.toString());
return;
}
diff --git
a/src/test/java/org/apache/commons/text/translate/CsvTranslatorsTest.java
b/src/test/java/org/apache/commons/text/translate/CsvTranslatorsTest.java
index d849d160..98a8873f 100644
--- a/src/test/java/org/apache/commons/text/translate/CsvTranslatorsTest.java
+++ b/src/test/java/org/apache/commons/text/translate/CsvTranslatorsTest.java
@@ -77,6 +77,16 @@ class CsvTranslatorsTest {
assertEquals("\"hi,this,is,a,\"\"quote,test\"", data);
}
+ @Test
+ void testCsvUnEscaperSingleQuoteTest() throws IOException {
+ final CsvTranslators.CsvUnescaper escaper = new
CsvTranslators.CsvUnescaper();
+ final Writer writer = new StringWriter();
+ final String input = "\"";
+ escaper.translateWhole(input, writer);
+ final String data = writer.toString();
+ assertEquals(input, data);
+ }
+
@Test
void testCsvUnEscaperPlaneTextTest() throws IOException {
final CsvTranslators.CsvUnescaper escaper = new
CsvTranslators.CsvUnescaper();