fix 60 interval issue
diff --git a/cronexpr_parse.go b/cronexpr_parse.go
index aeb8296..be6ef17 100644
--- a/cronexpr_parse.go
+++ b/cronexpr_parse.go
@@ -446,6 +446,9 @@
directive.first = desc.min
directive.last = desc.max
directive.step = atoi(snormal[pairs[2]:pairs[3]])
+ if directive.step < 1 || directive.step > desc.max {
+ return nil, fmt.Errorf("invalid interval %s", snormal)
+ }
directives = append(directives, &directive)
continue
}
@@ -456,6 +459,9 @@
directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
directive.last = desc.max
directive.step = atoi(snormal[pairs[4]:pairs[5]])
+ if directive.step < 1 || directive.step > desc.max {
+ return nil, fmt.Errorf("invalid interval %s", snormal)
+ }
directives = append(directives, &directive)
continue
}
@@ -466,6 +472,9 @@
directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
directive.last = desc.atoi(snormal[pairs[4]:pairs[5]])
directive.step = atoi(snormal[pairs[6]:pairs[7]])
+ if directive.step < 1 || directive.step > desc.max {
+ return nil, fmt.Errorf("invalid interval %s", snormal)
+ }
directives = append(directives, &directive)
continue
}
diff --git a/cronexpr_test.go b/cronexpr_test.go
index b729170..f170769 100644
--- a/cronexpr_test.go
+++ b/cronexpr_test.go
@@ -284,6 +284,29 @@
}
}
+// Issue: https://github.com/gorhill/cronexpr/issues/16
+func TestInterval_Interval60Issue(t *testing.T){
+ _, err := cronexpr.Parse("*/60 * * * * *")
+ if err == nil {
+ t.Errorf("parsing with interval 60 should return err")
+ }
+
+ _, err = cronexpr.Parse("*/61 * * * * *")
+ if err == nil {
+ t.Errorf("parsing with interval 61 should return err")
+ }
+
+ _, err = cronexpr.Parse("2/60 * * * * *")
+ if err == nil {
+ t.Errorf("parsing with interval 60 should return err")
+ }
+
+ _, err = cronexpr.Parse("2-20/61 * * * * *")
+ if err == nil {
+ t.Errorf("parsing with interval 60 should return err")
+ }
+}
+
/******************************************************************************/
var benchmarkExpressions = []string{