From 9a8329ebfe6b713acd8c6e42de095e44cd126f2c Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Tue, 23 Dec 2014 01:40:47 +0100 Subject: [PATCH] [FIXED JENKINS-25897] Add range check for H(X-Y) syntax --- core/src/main/grammar/crontab.g | 2 +- core/src/main/java/hudson/scheduler/BaseParser.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) 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(); -- GitLab