diff --git a/cronexpr_parse.go b/cronexpr_parse.go index 8b81ca0..85278bc 100644 --- a/cronexpr_parse.go +++ b/cronexpr_parse.go @@ -450,6 +450,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 } @@ -460,6 +463,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 } @@ -470,6 +476,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 3e68515..c566a70 100644 --- a/cronexpr_test.go +++ b/cronexpr_test.go @@ -293,6 +293,29 @@ func TestNextN_every5min(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{