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 ae85262f0 [LANG-1828] Fix OOM in StringUtils.leftPad/rightPad when 
size is Integer.MIN_VALUE (#1736).
ae85262f0 is described below

commit ae85262f04df19b6307de18758cfdcc31cae733d
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jun 29 21:30:22 2026 +0000

    [LANG-1828] Fix OOM in StringUtils.leftPad/rightPad when size is
    Integer.MIN_VALUE (#1736).
---
 src/changes/changes.xml                                  |  1 +
 src/main/java/org/apache/commons/lang3/StringUtils.java  | 16 ++++++++--------
 .../java/org/apache/commons/lang3/StringUtilsTest.java   |  6 ++++++
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4be35f47b..cb532c19b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -213,6 +213,7 @@ java.lang.NullPointerException: Cannot invoke
     <action                   type="fix" dev="ggregory" due-to="alhudz, Gary 
Gregory">Keep StrBuilder.reverse from splitting surrogate pairs 
(#1730).</action>
     <action                   type="fix" dev="ggregory" due-to="alhudz, Gary 
Gregory">Fix NumberUtils min/max varargs dropping the sign of zero 
(#1733).</action>
     <action                   type="fix" dev="ggregory" due-to="alhudz, Gary 
Gregory">Handle supplementary code points in StringUtils.splitByCharacterType() 
(#1734).</action>
+    <action issue="LANG-1828" type="fix" dev="ggregory" due-to="Dhruv 
Aggarwal, Gary Gregory">Fix OOM in StringUtils.leftPad/rightPad when size is 
Integer.MIN_VALUE (#1736).</action>
     <!-- ADD -->
     <action                   type="add" dev="ggregory" due-to="Gary 
Gregory">Add JavaVersion.JAVA_27.</action>
     <action                   type="add" dev="ggregory" due-to="Gary 
Gregory">Add SystemUtils.IS_JAVA_27.</action>
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java 
b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 5764c8b86..ab5d94bba 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -5194,8 +5194,8 @@ public static String leftPad(final String str, final int 
size) {
      * @since 2.0
      */
     public static String leftPad(final String str, final int size, final char 
padChar) {
-        if (str == null) {
-            return null;
+        if (str == null || size <= str.length()) {
+            return str;
         }
         final int pads = size - str.length();
         if (pads <= 0) {
@@ -5232,8 +5232,8 @@ public static String leftPad(final String str, final int 
size, final char padCha
      * @return left padded String or original String if no padding is 
necessary, {@code null} if null String input.
      */
     public static String leftPad(final String str, final int size, String 
padStr) {
-        if (str == null) {
-            return null;
+        if (str == null || size <= str.length()) {
+            return str;
         }
         if (isEmpty(padStr)) {
             padStr = SPACE;
@@ -6988,8 +6988,8 @@ public static String rightPad(final String str, final int 
size) {
      * @since 2.0
      */
     public static String rightPad(final String str, final int size, final char 
padChar) {
-        if (str == null) {
-            return null;
+        if (str == null || size <= str.length()) {
+            return str;
         }
         final int pads = size - str.length();
         if (pads <= 0) {
@@ -7026,8 +7026,8 @@ public static String rightPad(final String str, final int 
size, final char padCh
      * @return right padded String or original String if no padding is 
necessary, {@code null} if null String input.
      */
     public static String rightPad(final String str, final int size, String 
padStr) {
-        if (str == null) {
-            return null;
+        if (str == null || size <= str.length()) {
+            return str;
         }
         if (isEmpty(padStr)) {
             padStr = SPACE;
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java 
b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index 76e9c7d72..9bccaaf92 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -1323,6 +1323,7 @@ void testLeftPad_StringInt() {
         assertEquals("     ", StringUtils.leftPad("", 5));
         assertEquals("  abc", StringUtils.leftPad("abc", 5));
         assertEquals("abc", StringUtils.leftPad("abc", 2));
+        assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE));
     }
 
     @Test
@@ -1333,6 +1334,7 @@ void testLeftPad_StringIntChar() {
         assertEquals("xxabc", StringUtils.leftPad("abc", 5, 'x'));
         assertEquals("\uffff\uffffabc", StringUtils.leftPad("abc", 5, 
'\uffff'));
         assertEquals("abc", StringUtils.leftPad("abc", 2, ' '));
+        assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE, ' 
'));
         final String str = StringUtils.leftPad("aaa", 10000, 'a');  // bigger 
than pad length
         assertEquals(10000, str.length());
         assertTrue(StringUtils.containsOnly(str, 'a'));
@@ -1350,6 +1352,7 @@ void testLeftPad_StringIntString() {
         assertEquals("abc", StringUtils.leftPad("abc", -1, " "));
         assertEquals("  abc", StringUtils.leftPad("abc", 5, null));
         assertEquals("  abc", StringUtils.leftPad("abc", 5, ""));
+        assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE, " 
"));
     }
 
     @Test
@@ -2202,6 +2205,7 @@ void testRightPad_StringInt() {
         assertEquals("abc  ", StringUtils.rightPad("abc", 5));
         assertEquals("abc", StringUtils.rightPad("abc", 2));
         assertEquals("abc", StringUtils.rightPad("abc", -1));
+        assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE));
     }
 
     @Test
@@ -2212,6 +2216,7 @@ void testRightPad_StringIntChar() {
         assertEquals("abc", StringUtils.rightPad("abc", 2, ' '));
         assertEquals("abc", StringUtils.rightPad("abc", -1, ' '));
         assertEquals("abcxx", StringUtils.rightPad("abc", 5, 'x'));
+        assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE, ' 
'));
         final String str = StringUtils.rightPad("aaa", 10000, 'a');  // bigger 
than pad length
         assertEquals(10000, str.length());
         assertTrue(StringUtils.containsOnly(str, 'a'));
@@ -2229,6 +2234,7 @@ void testRightPad_StringIntString() {
         assertEquals("abc", StringUtils.rightPad("abc", -1, " "));
         assertEquals("abc  ", StringUtils.rightPad("abc", 5, null));
         assertEquals("abc  ", StringUtils.rightPad("abc", 5, ""));
+        assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE, " 
"));
     }
 
     @Test

Reply via email to