calendarspec: reject strings with spurious spaces and signs

strtoul() parses leading whitespace and an optional sign;
check that the first character is a digit to prevent odd
specifications like "00:  00:  00" and "-00:+00/-1".
This commit is contained in:
Douglas Christman 2016-11-24 12:47:55 -05:00
parent 6bae2fd4cd
commit 9dfa81a00a
2 changed files with 7 additions and 0 deletions

View file

@ -18,6 +18,7 @@
***/
#include <alloca.h>
#include <ctype.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
@ -458,6 +459,9 @@ static int parse_component_decimal(const char **p, bool usec, unsigned long *res
char *ee = NULL;
int r;
if (!isdigit(**p))
return -EINVAL;
errno = 0;
value = strtoul(*p, &ee, 10);
if (errno > 0)

View file

@ -216,6 +216,9 @@ int main(int argc, char* argv[]) {
assert_se(calendar_spec_from_string("*-*~5/5", &c) < 0);
assert_se(calendar_spec_from_string("Monday.. 12:00", &c) < 0);
assert_se(calendar_spec_from_string("Monday..", &c) < 0);
assert_se(calendar_spec_from_string("-00:+00/-5", &c) < 0);
assert_se(calendar_spec_from_string("00:+00/-5", &c) < 0);
assert_se(calendar_spec_from_string("2016- 11- 24 12: 30: 00", &c) < 0);
test_timestamp();
test_hourly_bug_4031();