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 {