mirror of
https://github.com/systemd/systemd
synced 2024-09-16 06:43:18 +00:00
basic: fix env expansion for strings leading with two dollar signs
The way to escape a literal dollar sign is to write "$$". But this does not work right if it's at the beginning of the argument. Fix it.
This commit is contained in:
parent
42911a567d
commit
df553b586b
|
@ -541,7 +541,7 @@ char **replace_env_argv(char **argv, char **env) {
|
|||
STRV_FOREACH(i, argv) {
|
||||
|
||||
/* If $FOO appears as single word, replace it by the split up variable */
|
||||
if ((*i)[0] == '$' && (*i)[1] != '{') {
|
||||
if ((*i)[0] == '$' && (*i)[1] != '{' && (*i)[1] != '$') {
|
||||
char *e;
|
||||
char **w, **m = NULL;
|
||||
unsigned q;
|
||||
|
|
|
@ -118,6 +118,8 @@ static void test_replace_env_arg(void) {
|
|||
"$FOO$FOO",
|
||||
"${FOO}${BAR}",
|
||||
"${FOO",
|
||||
"FOO$$${FOO}",
|
||||
"$$FOO${FOO}",
|
||||
NULL
|
||||
};
|
||||
_cleanup_strv_free_ char **r = NULL;
|
||||
|
@ -133,7 +135,9 @@ static void test_replace_env_arg(void) {
|
|||
assert_se(streq(r[6], "BAR"));
|
||||
assert_se(streq(r[7], "BAR BARwaldo"));
|
||||
assert_se(streq(r[8], "${FOO"));
|
||||
assert_se(strv_length(r) == 9);
|
||||
assert_se(streq(r[9], "FOO$BAR BAR"));
|
||||
assert_se(streq(r[10], "$FOOBAR BAR"));
|
||||
assert_se(strv_length(r) == 11);
|
||||
}
|
||||
|
||||
static void test_env_clean(void) {
|
||||
|
|
Loading…
Reference in a new issue