diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 5918d808d..d2416b4b9 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -22,6 +22,7 @@ + StringUtils.repeat('z', -1) throws NegativeArraySizeException Add swap and shift operations for arrays to ArrayUtils TypeUtils.parameterizeWithOwner - wrong format descriptor for "invalid number of type parameters". MultilineRecursiveToStringStyle largely unusable due to being package-private. diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 360185c17..26245726d 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -5233,6 +5233,9 @@ public static String repeat(final String str, final String separator, final int * @see #repeat(String, int) */ public static String repeat(final char ch, final int repeat) { + if (repeat <= 0) { + return EMPTY; + } final char[] buf = new char[repeat]; for (int i = repeat - 1; i >= 0; i--) { buf[i] = ch; diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 5721dbc70..3addd78a2 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -1353,6 +1353,7 @@ public void testRepeat_StringInt() { assertEquals("", StringUtils.repeat("ab", 0)); assertEquals("", StringUtils.repeat("", 3)); assertEquals("aaa", StringUtils.repeat("a", 3)); + assertEquals("", StringUtils.repeat("a", -2)); assertEquals("ababab", StringUtils.repeat("ab", 3)); assertEquals("abcabcabc", StringUtils.repeat("abc", 3)); final String str = StringUtils.repeat("a", 10000); // bigger than pad limit @@ -1374,6 +1375,13 @@ public void testRepeat_StringStringInt() { assertEquals("?, ?, ?", StringUtils.repeat("?", ", ", 3)); } + @Test + public void testRepeat_CharInt() { + assertEquals("zzz", StringUtils.repeat('z', 3)); + assertEquals("", StringUtils.repeat('z', 0)); + assertEquals("", StringUtils.repeat('z', -2)); + } + @Test public void testChop() {