Closed
Description
Affects: Spring Framework 5.3
Before Spring 5.3 the parse for cron expressions had a different behaviour for the day of the week.
Example of an expression that has been working for years: "32 22/5 * ? * SUN-FRI"
Example of its use in Spring 5.3: CronExpression.parse("32 22/5 * ? * SUN-FRI");
Before the six space-separated string SUN-FRI was interpreted as 0-5.
Now in Spring 5.3 it is interpreted as 7-5 and that throws un exception:
Exception in thread "main" java.lang.IllegalArgumentException: Minimum value must be less than maximum value '7-5' in cron expression "32 22/5 * ? * SUN-FRI"
at org.springframework.scheduling.support.CronExpression.parse(CronExpression.java:201)
at TestCron.main(TestCron.java:8)
Caused by: java.lang.IllegalArgumentException: Minimum value must be less than maximum value '7-5'
at org.springframework.scheduling.support.BitsCronField.parseField(BitsCronField.java:150)
at org.springframework.scheduling.support.BitsCronField.parseDate(BitsCronField.java:117)
at org.springframework.scheduling.support.BitsCronField.parseDaysOfWeek(BitsCronField.java:103)
at org.springframework.scheduling.support.CronField.parseDaysOfWeek(CronField.java:105)
at org.springframework.scheduling.support.CronExpression.parse(CronExpression.java:195)
... 1 more
Caused by: java.lang.IllegalArgumentException: Minimum value must be less than maximum value
at java.time.temporal.ValueRange.of(ValueRange.java:127)
at org.springframework.scheduling.support.BitsCronField.parseRange(BitsCronField.java:169)
at org.springframework.scheduling.support.BitsCronField.parseField(BitsCronField.java:129)
... 5 more
A complete and very simple example of use:
import org.springframework.scheduling.support.CronExpression;
public class TestCron {
public static void main(String[] args) throws Exception {
CronExpression.parse("32 22/5 * ? * SUN-FRI");
}
}
It seems the class org.springframework.scheduling.support.CronField
always consider Monday as position 0 (zero) in its array DAYS. But the documentation https://spring.io/blog/2020/11/10/new-in-spring-5-3-improved-cron-expressions says Sunday is zero (or seven).