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/test/test-unit-file.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/test/test-unit-file.c') diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index 22ac76de56..5a9796df58 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -91,6 +91,7 @@ static void check_execcommand(ExecCommand *c, static void test_config_parse_exec(void) { /* int config_parse_exec( + const char *unit, const char *filename, unsigned line, const char *section, @@ -302,6 +303,20 @@ static void test_config_parse_exec(void) { assert_se(r == 0); assert_se(c1->command_next == NULL); + log_info("/* missing ending ' */"); + r = config_parse_exec(NULL, "fake", 4, "section", 1, + "LValue", 0, "/path 'foo", + &c, NULL); + assert_se(r == 0); + assert_se(c1->command_next == NULL); + + log_info("/* missing ending ' with trailing backslash */"); + r = config_parse_exec(NULL, "fake", 4, "section", 1, + "LValue", 0, "/path 'foo\\", + &c, NULL); + assert_se(r == 0); + assert_se(c1->command_next == NULL); + exec_command_free_list(c); } -- cgit v1.2.3-54-g00ecf