From 41319a8cf83ab9edc60aaf05a6f56a3500a9b01e Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 26 Feb 2021 14:54:34 +0100 Subject: [PATCH] Work around forbidden chars in wordexp(): | < > & ; Signed-off-by: Joachim Wiberg --- src/service.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/service.c b/src/service.c index 116f1528..c5e53c58 100644 --- a/src/service.c +++ b/src/service.c @@ -493,10 +493,25 @@ static int service_start(svc_t *svc) } for (i = 0; i < MAX_NUM_SVC_ARGS; i++) { - if (strlen(svc->args[i]) == 0) + char *arg = svc->args[i]; + size_t len = strlen(arg); + char str[len + 2] = {0}; + char ch = *arg; + + if (len == 0) break; - if ((rc = wordexp(svc->args[i], &we, WRDE_APPEND))) + /* + * Escape forbidden characters in wordexp() + * but allowed in Finit run/task stanzas, + * + * XXX: escapes only leading characters ... + */ + if (strchr("|<>&:", ch)) + str[0] = '\\'; + strlcat(str, arg, sizeof(str)); + + if ((rc = wordexp(str, &we, WRDE_APPEND))) goto nomem; }