From: Lennart Poettering Date: Thu, 6 Jan 2011 22:52:58 +0000 (+0100) Subject: service: don't hit an assert if information in LSB headers is incorrectly formatted X-Git-Tag: v16~4 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=e83c7c0ba480c6d37d6d586b9337b1ad32ee52ca;ds=sidebyside service: don't hit an assert if information in LSB headers is incorrectly formatted https://bugzilla.redhat.com/show_bug.cgi?id=667665 --- diff --git a/src/service.c b/src/service.c index 9f2ee4192..a28eb8a6b 100644 --- a/src/service.c +++ b/src/service.c @@ -328,10 +328,13 @@ static int sysv_translate_facility(const char *name, const char *filename, char /* If we don't know this name, fallback heuristics to figure * out whether something is a target or a service alias. */ - if (*name == '$') + if (*name == '$') { + if (!unit_prefix_is_valid(n)) + return -EINVAL; + /* Facilities starting with $ are most likely targets */ r = unit_name_build(n, NULL, ".target"); - else if (filename && streq(name, filename)) + } else if (filename && streq(name, filename)) /* Names equalling the file name of the services are redundant */ return 0; else @@ -684,10 +687,14 @@ static int service_load_sysv_path(Service *s, const char *path) { } r = sysv_translate_facility(n, file_name_from_path(path), &m); - free(n); - if (r < 0) - goto finish; + if (r < 0) { + log_error("[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", path, line, n, strerror(-r)); + free(n); + continue; + } + + free(n); if (r == 0) continue;