Merge pull request #33 from pengwk/add-value-boundary-check
Add value boundary check.
diff --git a/crontab/_crontab.py b/crontab/_crontab.py
index 528809e..fa7bb90 100644
--- a/crontab/_crontab.py
+++ b/crontab/_crontab.py
@@ -293,6 +293,12 @@
_assert(start <= end,
"%s range start value %r > end value %r",
_attribute[which], start, end)
+
+ if increment:
+ next_value = start + increment
+ _assert(next_value <= _end_limit,
+ "the first next value %r out of range [%r, %r]",
+ next_value, start, _end_limit)
return set(range(start, end+1, increment or 1))
_start, _end = _ranges[which]
@@ -320,6 +326,10 @@
"last <day> specifier must include a day number or range in the 'weekday' field, you entered %r", entry)
return None, _end
+ # allow Sunday to be specified as weekday 7
+ if which == WEEK_OFFSET:
+ _end_limit = 7
+
increment = None
# increments
if '/' in entry:
@@ -328,10 +338,11 @@
_assert(increment > 0,
"you can only use positive increment values, you provided %r",
increment)
-
- # allow Sunday to be specified as weekday 7
- if which == WEEK_OFFSET:
- _end_limit = 7
+ exceed_limit_error_msg_tpl = ("you can only use increment values "
+ "which less than or equal to the %r")
+ _assert(increment <= _end_limit,
+ exceed_limit_error_msg_tpl,
+ _end_limit)
# handle singles and ranges
good = _parse_piece(entry)
diff --git a/tests/test_crontab.py b/tests/test_crontab.py
index 8c0e97d..aa70004 100644
--- a/tests/test_crontab.py
+++ b/tests/test_crontab.py
@@ -161,6 +161,11 @@
self.assertRaises(ValueError, lambda: CronTab('* * 32 * *'))
self.assertRaises(ValueError, lambda: CronTab('* * * 13 *'))
self.assertRaises(ValueError, lambda: CronTab('* * * * 9999'))
+ self.assertRaises(ValueError, lambda: CronTab('20/50 * * * * *'))
+ self.assertRaises(ValueError, lambda: CronTab('0/100 * * * * *'))
+ self.assertRaises(ValueError, lambda: CronTab('*,50-59/12 * * * *'))
+ self.assertRaises(ValueError, lambda: CronTab('* * * DEC/7 * *'))
+ self.assertRaises(ValueError, lambda: CronTab('* * * * MON/7 *'))
def test_previous(self):
schedule = CronTab('0 * * * *')