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