diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1aae92a6e..73a6f5489 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -22,6 +22,7 @@
+ RandomStringUtils throws confusing IAE when end <= start
RandomStringUtils.random(count, 0, 0, false, false, universe, random) always throws java.lang.ArrayIndexOutOfBoundsException
LocaleUtils - unnecessary recursive call in SyncAvoid class.
Javadoc bug in DateUtils#ceiling for Calendar and Object versions.
diff --git a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
index a79905754..9dfee222b 100644
--- a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
@@ -242,6 +242,10 @@ public class RandomStringUtils {
start = ' ';
}
}
+ } else {
+ if (end <= start) {
+ throw new IllegalArgumentException("Parameter end (" + end + ") must be greater than start (" + start + ")");
+ }
}
char[] buffer = new char[count];
diff --git a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
index 6c7b0c16d..a7f57bf0c 100644
--- a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
@@ -130,6 +130,17 @@ public class RandomStringUtilsTest extends junit.framework.TestCase {
assertEquals("aaa", RandomStringUtils.random(3,0,0,false,false,new char[]{'a'},new Random(seed)));
}
+ public void testLANG807() {
+ try {
+ RandomStringUtils.random(3,5,5,false,false);
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException ex) { // distinguish from Random#nextInt message
+ final String msg = ex.getMessage();
+ assertTrue("Message (" + msg + ") must contain 'start'", msg.contains("start"));
+ assertTrue("Message (" + msg + ") must contain 'end'", msg.contains("end"));
+ }
+ }
+
public void testExceptions() {
final char[] DUMMY = new char[]{'a'}; // valid char array
try {