diff --git a/core/src/main/grammar/crontab.g b/core/src/main/grammar/crontab.g index f52aaf571c..4ace2d3adf 100644 --- a/core/src/main/grammar/crontab.g +++ b/core/src/main/grammar/crontab.g @@ -110,7 +110,7 @@ throws ANTLRException } | ("H" "(")=> "H" "(" s=token "-" e=token ")" ( "/" d=token )? { - bits = doHash(s,e,d); + bits = doHash(s,e,d,field); } | "H" ( "/" d=token )? { diff --git a/core/src/main/java/hudson/scheduler/BaseParser.java b/core/src/main/java/hudson/scheduler/BaseParser.java index 1e32f0d042..476bc41e5e 100644 --- a/core/src/main/java/hudson/scheduler/BaseParser.java +++ b/core/src/main/java/hudson/scheduler/BaseParser.java @@ -96,10 +96,12 @@ abstract class BaseParser extends LLkParser { int u = UPPER_BOUNDS[field]; if (field==2) u = 28; // day of month can vary depending on month, so to make life simpler, just use [1,28] that's always safe if (field==4) u = 6; // Both 0 and 7 of day of week are Sunday. For better distribution, limit upper bound to 6 - return doHash(LOWER_BOUNDS[field], u, step); + return doHash(LOWER_BOUNDS[field], u, step, field); } - protected long doHash(int s, int e, int step) throws ANTLRException { + protected long doHash(int s, int e, int step, int field) throws ANTLRException { + rangeCheck(s, field); + rangeCheck(e, field); if (step > e - s + 1) { error(Messages.BaseParser_OutOfRange(step, 1, e - s + 1)); throw new AssertionError();