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() {