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

Reply via email to