gluon-cron: Fix endless loop parsing invalid lines
Using the line ``` * * * * echo "foobar" ``` (notice the missing fifth time field) in a crontab causes gluon-cron to enter an endless loop while parsing it, thus it won't even execute the other, valid crontabs. This is caused by the loop in [line 138] where `begin - min` substracts the unsigned `min` from the signed `begin`. If now `begin` is invalid, `strict_atoi` returns -1 and the loop starts at `(-1)-1=MAX_INT` and runs while `i <= MAX_INT` which is always true. The real culprit lies in [line 134] where exactly this case `begin < min` is checked - but because of the signedness, this check doesn't work as expected either. The easiest solution is to make `min` a signed integer instead of an unsigned one, as we do not require it to be very large and only pass the constants 0 or 1 to it. To avoid other similar problems, this patch makes the input variable `n` a signed integer as well.
This commit is contained in:
parent
40321595a9
commit
afce06c3d3
@ -94,7 +94,7 @@ static uint64_t parse_strings(const char *input, const char *const *strings, siz
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint64_t parse_times(char *input, unsigned min, unsigned n) {
|
||||
static uint64_t parse_times(char *input, int min, int n) {
|
||||
uint64_t ret = 0;
|
||||
int step = 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user