diff --git a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java index b29231deeea..d61b4f92fad 100644 --- a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java +++ b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java @@ -278,6 +278,19 @@ public static String random(int count, int start, int end, final boolean letters "Parameter end (" + end + ") must be greater than start (" + start + ")"); } else if (start < 0 || end < 0) { throw new IllegalArgumentException("Character positions MUST be >= 0"); + } else if (chars != null && (start >= chars.length || end > chars.length)) { + final StringBuilder errorMsg = new StringBuilder(); + final int charsLength = chars.length; + if (start >= charsLength) { + errorMsg.append("Parameter start (").append(start).append(") must be less than chars array length ").append(charsLength); + } + if (end > charsLength) { + if (errorMsg.length() > 0) { + errorMsg.append("; "); + } + errorMsg.append("Parameter end (").append(end).append(") must be less than or equal to chars array length ").append(charsLength); + } + throw new IllegalArgumentException(errorMsg.toString()); } if (end > Character.MAX_CODE_POINT) { diff --git a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java index 3602fbc6461..4da52236181 100644 --- a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java @@ -104,6 +104,8 @@ void testExceptionsRandom() { assertIllegalArgumentException(() -> RandomStringUtils.random(8, 32, 48, false, true)); assertIllegalArgumentException(() -> RandomStringUtils.random(8, 32, 65, true, false)); assertIllegalArgumentException(() -> RandomStringUtils.random(1, Integer.MIN_VALUE, -10, false, false, null)); + assertIllegalArgumentException(() -> RandomStringUtils.random(2, 4, 5, false, false, new char[] { 'a', 'b', 'c', 'd' }, new Random())); + assertIllegalArgumentException(() -> RandomStringUtils.random(2, 1, 5, false, false, new char[] { 'a', 'b', 'c', 'd' }, new Random())); } @ParameterizedTest