Merge pull request #22 from aiquestion/intervalissue
fix infinite loop on err interval
This commit is contained in:
		
						commit
						d520615e53
					
				| 
						 | 
					@ -446,6 +446,9 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error)
 | 
				
			||||||
			directive.first = desc.min
 | 
								directive.first = desc.min
 | 
				
			||||||
			directive.last = desc.max
 | 
								directive.last = desc.max
 | 
				
			||||||
			directive.step = atoi(snormal[pairs[2]:pairs[3]])
 | 
								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)
 | 
								directives = append(directives, &directive)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -456,6 +459,9 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error)
 | 
				
			||||||
			directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
 | 
								directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
 | 
				
			||||||
			directive.last = desc.max
 | 
								directive.last = desc.max
 | 
				
			||||||
			directive.step = atoi(snormal[pairs[4]:pairs[5]])
 | 
								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)
 | 
								directives = append(directives, &directive)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -466,6 +472,9 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error)
 | 
				
			||||||
			directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
 | 
								directive.first = desc.atoi(snormal[pairs[2]:pairs[3]])
 | 
				
			||||||
			directive.last = desc.atoi(snormal[pairs[4]:pairs[5]])
 | 
								directive.last = desc.atoi(snormal[pairs[4]:pairs[5]])
 | 
				
			||||||
			directive.step = atoi(snormal[pairs[6]:pairs[7]])
 | 
								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)
 | 
								directives = append(directives, &directive)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -284,6 +284,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{
 | 
					var benchmarkExpressions = []string{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue