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 2240c1f93 Fix int overflow in StringUtils.midString() length handling
(#1699)
2240c1f93 is described below
commit 2240c1f93e5f96b12a83ec8615c29dfac46258e9
Author: alhuda <[email protected]>
AuthorDate: Thu Jun 11 04:09:34 2026 +0530
Fix int overflow in StringUtils.midString() length handling (#1699)
Co-authored-by: alhudz <[email protected]>
---
src/main/java/org/apache/commons/lang3/StringUtils.java | 2 +-
src/main/java/org/apache/commons/lang3/text/StrBuilder.java | 2 +-
src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java | 3 +++
src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java | 2 ++
4 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java
b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 79e130683..cff2e3c64 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -5377,7 +5377,7 @@ public static String mid(final String str, int pos, final
int len) {
if (pos < 0) {
pos = 0;
}
- if (str.length() <= pos + len) {
+ if (str.length() - pos <= len) {
return str.substring(pos);
}
return str.substring(pos, pos + len);
diff --git a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
index 2b4259f52..45dd1e0a0 100644
--- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
@@ -2479,7 +2479,7 @@ public String midString(int index, final int length) {
if (length <= 0 || index >= size) {
return StringUtils.EMPTY;
}
- if (size <= index + length) {
+ if (size - index <= length) {
return new String(buffer, index, size - index);
}
return new String(buffer, index, length);
diff --git
a/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java
b/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java
index 89f2d5a2d..203327a20 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java
@@ -102,6 +102,9 @@ void testMid_String() {
assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 80));
assertEquals("", StringUtils.mid(FOOBAR, 9, 3));
assertEquals(FOO, StringUtils.mid(FOOBAR, -1, 3));
+ // LANG: a len that overflows pos + len must still return the rest
+ assertEquals(BAR, StringUtils.mid(FOOBAR, 3, Integer.MAX_VALUE));
+ assertEquals(FOOBAR, StringUtils.mid(FOOBAR, 0, Integer.MAX_VALUE));
}
@Test
diff --git a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
index 04ef83eed..5d6b739c4 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
@@ -1177,6 +1177,8 @@ void testMidString() {
assertEquals("", sb.midString(0, -1));
assertEquals("", sb.midString(20, 2));
assertEquals("hello", sb.midString(14, 22));
+ // a length that overflows index + length must still return the rest
+ assertEquals("hello", sb.midString(14, Integer.MAX_VALUE));
}
@Test