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