From 470dca63cd2b1579f45f72b6b9777494abeff105 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Wed, 22 Apr 2015 23:09:43 +0100 Subject: util: Fix assertion in split() on missing ' When parsing a unit with a trailing slash after an escaped line break, like ExecStart=/bin/echo 'foo \ bar' the split() function (through config_parse()) asserted and crashed pid 1: Assertion 'current[*l + 1] == quotechars[0]' failed at ../src/shared/util.c:583, function split(). Aborting. Fix this by returning an error in this case ("trailing garbage"). Add corresponding test case. Also fix the missing "unit" argument of config_parse_exec() in the comment. https://launchpad.net/bugs/1447243 --- src/shared/util.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/shared/util.c') diff --git a/src/shared/util.c b/src/shared/util.c index 4a044840bd..6a883d79d1 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -570,13 +570,12 @@ const char* split(const char **state, size_t *l, const char *separator, bool quo char quotechars[2] = {*current, '\0'}; *l = strcspn_escaped(current + 1, quotechars); - if (current[*l + 1] == '\0' || + if (current[*l + 1] == '\0' || current[*l + 1] != quotechars[0] || (current[*l + 2] && !strchr(separator, current[*l + 2]))) { /* right quote missing or garbage at the end */ *state = current; return NULL; } - assert(current[*l + 1] == quotechars[0]); *state = current++ + *l + 2; } else if (quoted) { *l = strcspn_escaped(current, separator); -- cgit v1.2.3-54-g00ecf