Skip to content

Commit b95effb

Browse files
[LANG-1828] Fix StringUtils.rightPad/leftPad OOM error on Integer.MIN_VALUE size of pad
1 parent 170e9f2 commit b95effb

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

src/main/java/org/apache/commons/lang3/StringUtils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5197,6 +5197,9 @@ public static String leftPad(final String str, final int size, final char padCha
51975197
if (str == null) {
51985198
return null;
51995199
}
5200+
if (size <= str.length()) {
5201+
return str;
5202+
}
52005203
final int pads = size - str.length();
52015204
if (pads <= 0) {
52025205
return str; // returns original String when possible
@@ -5235,6 +5238,9 @@ public static String leftPad(final String str, final int size, String padStr) {
52355238
if (str == null) {
52365239
return null;
52375240
}
5241+
if (size <= str.length()) {
5242+
return str;
5243+
}
52385244
if (isEmpty(padStr)) {
52395245
padStr = SPACE;
52405246
}
@@ -6991,6 +6997,9 @@ public static String rightPad(final String str, final int size, final char padCh
69916997
if (str == null) {
69926998
return null;
69936999
}
7000+
if (size <= str.length()) {
7001+
return str;
7002+
}
69947003
final int pads = size - str.length();
69957004
if (pads <= 0) {
69967005
return str; // returns original String when possible
@@ -7029,6 +7038,9 @@ public static String rightPad(final String str, final int size, String padStr) {
70297038
if (str == null) {
70307039
return null;
70317040
}
7041+
if (size <= str.length()) {
7042+
return str;
7043+
}
70327044
if (isEmpty(padStr)) {
70337045
padStr = SPACE;
70347046
}

src/test/java/org/apache/commons/lang3/StringUtilsTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,6 +1323,7 @@ void testLeftPad_StringInt() {
13231323
assertEquals(" ", StringUtils.leftPad("", 5));
13241324
assertEquals(" abc", StringUtils.leftPad("abc", 5));
13251325
assertEquals("abc", StringUtils.leftPad("abc", 2));
1326+
assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE));
13261327
}
13271328

13281329
@Test
@@ -1333,6 +1334,7 @@ void testLeftPad_StringIntChar() {
13331334
assertEquals("xxabc", StringUtils.leftPad("abc", 5, 'x'));
13341335
assertEquals("\uffff\uffffabc", StringUtils.leftPad("abc", 5, '\uffff'));
13351336
assertEquals("abc", StringUtils.leftPad("abc", 2, ' '));
1337+
assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE, ' '));
13361338
final String str = StringUtils.leftPad("aaa", 10000, 'a'); // bigger than pad length
13371339
assertEquals(10000, str.length());
13381340
assertTrue(StringUtils.containsOnly(str, 'a'));
@@ -1350,6 +1352,7 @@ void testLeftPad_StringIntString() {
13501352
assertEquals("abc", StringUtils.leftPad("abc", -1, " "));
13511353
assertEquals(" abc", StringUtils.leftPad("abc", 5, null));
13521354
assertEquals(" abc", StringUtils.leftPad("abc", 5, ""));
1355+
assertEquals("abc", StringUtils.leftPad("abc", Integer.MIN_VALUE, " "));
13531356
}
13541357

13551358
@Test
@@ -2202,6 +2205,7 @@ void testRightPad_StringInt() {
22022205
assertEquals("abc ", StringUtils.rightPad("abc", 5));
22032206
assertEquals("abc", StringUtils.rightPad("abc", 2));
22042207
assertEquals("abc", StringUtils.rightPad("abc", -1));
2208+
assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE));
22052209
}
22062210

22072211
@Test
@@ -2212,6 +2216,7 @@ void testRightPad_StringIntChar() {
22122216
assertEquals("abc", StringUtils.rightPad("abc", 2, ' '));
22132217
assertEquals("abc", StringUtils.rightPad("abc", -1, ' '));
22142218
assertEquals("abcxx", StringUtils.rightPad("abc", 5, 'x'));
2219+
assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE, ' '));
22152220
final String str = StringUtils.rightPad("aaa", 10000, 'a'); // bigger than pad length
22162221
assertEquals(10000, str.length());
22172222
assertTrue(StringUtils.containsOnly(str, 'a'));
@@ -2229,6 +2234,7 @@ void testRightPad_StringIntString() {
22292234
assertEquals("abc", StringUtils.rightPad("abc", -1, " "));
22302235
assertEquals("abc ", StringUtils.rightPad("abc", 5, null));
22312236
assertEquals("abc ", StringUtils.rightPad("abc", 5, ""));
2237+
assertEquals("abc", StringUtils.rightPad("abc", Integer.MIN_VALUE, " "));
22322238
}
22332239

22342240
@Test

0 commit comments

Comments
 (0)