mirror of
https://github.com/systemd/systemd
synced 2024-09-06 08:46:19 +00:00
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:
parent
6bae2fd4cd
commit
9dfa81a00a
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue