From 09745ce102324a7192b577cd7f59dac2ae51379b Mon Sep 17 00:00:00 2001 From: Dhruv Aggarwal <60102230+dhruvaggarwal2000@users.noreply.github.com> Date: Tue, 30 Jun 2026 02:38:14 +0530 Subject: [PATCH] [LANG-1828] Fix StringUtils.rightPad/leftPad OOM error on Integer.MIN_VALUE size of pad --- .../java/org/apache/commons/lang3/StringUtils.java | 12 ++++++++++++ .../org/apache/commons/lang3/StringUtilsTest.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 5764c8b8651..a4f02499f81 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -5197,6 +5197,9 @@ public static String leftPad(final String str, final int size, final char padCha if (str == null) { return null; } + if (size <= str.length()) { + return str; + } final int pads = size - str.length(); if (pads <= 0) { return str; // returns original String when possible @@ -5235,6 +5238,9 @@ public static String leftPad(final String str, final int size, String padStr) { if (str == null) { return null; } + if (size <= str.length()) { + return str; + } if (isEmpty(padStr)) { padStr = SPACE; } @@ -6991,6 +6997,9 @@ public static String rightPad(final String str, final int size, final char padCh if (str == null) { return null; } + if (size <= str.length()) { + return str; + } final int pads = size - str.length(); if (pads <= 0) { return str; // returns original String when possible @@ -7029,6 +7038,9 @@ public static String rightPad(final String str, final int size, String padStr) { if (str == null) { return null; } + if (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 76e9c7d724b..9bccaaf928f 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