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();

Reply via email to