mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
core/load-fragment: avoid allocating 0 bytes when given an invalid command
With a command line like "@/something" we would allocate an array with 0 elements. Avoid that, and add a test too.
This commit is contained in:
parent
4d8629de8b
commit
e01ff42899
@ -589,7 +589,8 @@ int config_parse_exec(const char *unit,
|
||||
}
|
||||
|
||||
found:
|
||||
n = new(char*, k + !separate_argv0);
|
||||
/* If seperate_argv0, we'll move first element to path variable */
|
||||
n = new(char*, MAX(k + !separate_argv0, 1u));
|
||||
if (!n)
|
||||
return log_oom();
|
||||
|
||||
|
@ -137,6 +137,20 @@ static void test_config_parse_exec(void) {
|
||||
c1 = c1->command_next;
|
||||
check_execcommand(c1, "/RValue/slashes2", "///argv0", "r1", NULL, false);
|
||||
|
||||
log_info("/* honour_argv0, no args */");
|
||||
r = config_parse_exec(NULL, "fake", 3, "section", 1,
|
||||
"LValue", 0, "@/RValue",
|
||||
&c, NULL);
|
||||
assert_se(r == 0);
|
||||
assert_se(c1->command_next == NULL);
|
||||
|
||||
log_info("/* no command, check for bad memory access */");
|
||||
r = config_parse_exec(NULL, "fake", 3, "section", 1,
|
||||
"LValue", 0, " ",
|
||||
&c, NULL);
|
||||
assert_se(r == 0);
|
||||
assert_se(c1->command_next == NULL);
|
||||
|
||||
log_info("/* ignore && honour_argv0 */");
|
||||
r = config_parse_exec(NULL, "fake", 4, "section", 1,
|
||||
"LValue", 0, "-@/RValue///slashes3 argv0a r1",
|
||||
|
Loading…
Reference in New Issue
Block a user