diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2015-05-14 09:06:40 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-05-15 20:02:44 +0200 |
commit | 35b1078e1c375df244e19961792aeb78ca34bb54 (patch) | |
tree | ad143847d324eeeb868f79674292bfa078840d85 /src/core/load-fragment.c | |
parent | 6b71bab08dc6c92156263daba0e969313eed1323 (diff) |
core: Fix assertion with empty Exec*= paths
An Exec*= line with whitespace after modifiers, like
ExecStart=- /bin/true
is considered to have an empty command path. This is as specified, but causes
systemd to crash with
Assertion 'skip < l' failed at ../src/core/load-fragment.c:607, function config_parse_exec(). Aborting.
Aborted (core dumped)
Fix this by logging an error instead and ignoring the invalid line.
Add corresponding test cases. Also add a test case for a completely empty value
which resets the command list.
https://launchpad.net/bugs/1454173
Diffstat (limited to 'src/core/load-fragment.c')
-rw-r--r-- | src/core/load-fragment.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 33d9e2714a..3865017d97 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -595,7 +595,11 @@ int config_parse_exec( skip = separate_argv0 + ignore; /* skip special chars in the beginning */ - assert(skip < l); + if (l <= skip) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Empty path in command line, ignoring: %s", rvalue); + r = 0; + goto fail; + } } else if (strneq(word, ";", MAX(l, 1U))) /* new commandline */ |