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-lang.git


The following commit(s) were added to refs/heads/master by this push:
     new 6dbbbb308 fix unescapeCsv bounds error on a single quote field (#1723)
6dbbbb308 is described below

commit 6dbbbb308bb77ba9c0ddab1ae400ee2ff76026b4
Author: alhuda <[email protected]>
AuthorDate: Sun Jun 21 16:19:09 2026 +0530

    fix unescapeCsv bounds error on a single quote field (#1723)
---
 src/main/java/org/apache/commons/lang3/StringEscapeUtils.java     | 2 +-
 src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java 
b/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java
index 4e0f46f77..b28290eb1 100644
--- a/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java
@@ -81,7 +81,7 @@ public int translate(final CharSequence input, final int 
index, final Writer out
             if (index != 0) {
                 throw new IllegalStateException("CsvUnescaper should never 
reach the [1] index");
             }
-            if (input.charAt(0) != CSV_QUOTE || input.charAt(input.length() - 
1) != CSV_QUOTE) {
+            if (input.length() < 2 || input.charAt(0) != CSV_QUOTE || 
input.charAt(input.length() - 1) != CSV_QUOTE) {
                 out.write(input.toString());
                 return Character.codePointCount(input, 0, input.length());
             }
diff --git a/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java 
b/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
index d9aba2cd1..3f3f1ee73 100644
--- a/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
@@ -430,6 +430,9 @@ void testUnescapeCsvString() {
         assertNull(StringEscapeUtils.unescapeCsv(null));
 
         assertEquals("\"foo.bar\"", 
StringEscapeUtils.unescapeCsv("\"foo.bar\""));
+
+        // a single quote is not an enclosing pair, so it passes through 
unchanged
+        assertEquals("\"", StringEscapeUtils.unescapeCsv("\""));
     }
 
     @Test

Reply via email to