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 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error) 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 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error) 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 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error) 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 691aa84..a18ffad 100644 --- a/cronexpr_test.go +++ b/cronexpr_test.go @@ -774,6 +774,29 @@ func TestDST(t *testing.T) { } } +// 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{