CronSequenceGenerator prevents stack overflow in case of inverted range
Issue: SPR-14462
(cherry picked from commit da59b4d)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -379,6 +379,10 @@ public class CronSequenceGenerator {
|
|||||||
throw new IllegalArgumentException("Range less than minimum (" + min + "): '" +
|
throw new IllegalArgumentException("Range less than minimum (" + min + "): '" +
|
||||||
field + "' in expression \"" + this.expression + "\"");
|
field + "' in expression \"" + this.expression + "\"");
|
||||||
}
|
}
|
||||||
|
if (result[0] > result[1]) {
|
||||||
|
throw new IllegalArgumentException("Invalid inverted range: '" + field +
|
||||||
|
"' in expression \"" + this.expression + "\"");
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -29,31 +29,51 @@ import static org.junit.Assert.*;
|
|||||||
public class CronSequenceGeneratorTests {
|
public class CronSequenceGeneratorTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAt50Seconds() {
|
public void at50Seconds() {
|
||||||
assertEquals(new Date(2012, 6, 2, 1, 0),
|
assertEquals(new Date(2012, 6, 2, 1, 0),
|
||||||
new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53, 50)));
|
new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53, 50)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAt0Seconds() {
|
public void at0Seconds() {
|
||||||
assertEquals(new Date(2012, 6, 2, 1, 0),
|
assertEquals(new Date(2012, 6, 2, 1, 0),
|
||||||
new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53)));
|
new CronSequenceGenerator("*/15 * 1-4 * * *").next(new Date(2012, 6, 1, 9, 53)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAt0Minutes() {
|
public void at0Minutes() {
|
||||||
assertEquals(new Date(2012, 6, 2, 1, 0),
|
assertEquals(new Date(2012, 6, 2, 1, 0),
|
||||||
new CronSequenceGenerator("0 */2 1-4 * * *").next(new Date(2012, 6, 1, 9, 0)));
|
new CronSequenceGenerator("0 */2 1-4 * * *").next(new Date(2012, 6, 1, 9, 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
public void testWith0Increment() {
|
public void with0Increment() {
|
||||||
new CronSequenceGenerator("*/0 * * * * *").next(new Date(2012, 6, 1, 9, 0));
|
new CronSequenceGenerator("*/0 * * * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
public void testWithNegativeIncrement() {
|
public void withNegativeIncrement() {
|
||||||
new CronSequenceGenerator("*/-1 * * * * *").next(new Date(2012, 6, 1, 9, 0));
|
new CronSequenceGenerator("*/-1 * * * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void withInvertedMinuteRange() {
|
||||||
|
new CronSequenceGenerator("* 6-5 * * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void withInvertedHourRange() {
|
||||||
|
new CronSequenceGenerator("* * 6-5 * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withSameMinuteRange() {
|
||||||
|
new CronSequenceGenerator("* 6-6 * * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withSameHourRange() {
|
||||||
|
new CronSequenceGenerator("* * 6-6 * * *").next(new Date(2012, 6, 1, 9, 0));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user