64 lines
2.5 KiB
Diff
64 lines
2.5 KiB
Diff
|
From cdc2ef6ba88210264f00997e7c99b7f3339c629e Mon Sep 17 00:00:00 2001
|
||
|
From: Lubomir Rintel <lkundrak@v3.sk>
|
||
|
Date: Wed, 11 Oct 2017 09:29:30 +0200
|
||
|
Subject: [PATCH] basic/env-util: drop the validation when deserializing
|
||
|
environment
|
||
|
|
||
|
The environment variables we've serialized can quite possibly contain
|
||
|
characters outside the set allowed by env_assignment_is_valid(). In
|
||
|
fact, my environment seems to contain a couple of these:
|
||
|
|
||
|
* TERMCAP set by screen contains a '\x7f' character
|
||
|
* BASH_FUNC_module%% variable has a '%' character in name
|
||
|
|
||
|
Strict check of environment variables name and value certainly makes sense for
|
||
|
unit files, but not so much for deserialization of values we already had
|
||
|
in our environment.
|
||
|
|
||
|
(cherry picked from commit ea43bdd1d7c14e3695a4cc081e4ef4f964160dc1)
|
||
|
---
|
||
|
src/basic/env-util.c | 5 -----
|
||
|
src/test/test-env-util.c | 5 +++--
|
||
|
2 files changed, 3 insertions(+), 7 deletions(-)
|
||
|
|
||
|
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
|
||
|
index fa42edfa96..a8b51e719f 100644
|
||
|
--- a/src/basic/env-util.c
|
||
|
+++ b/src/basic/env-util.c
|
||
|
@@ -809,10 +809,5 @@ int deserialize_environment(char ***environment, const char *line) {
|
||
|
if (r < 0)
|
||
|
return r;
|
||
|
|
||
|
- if (!env_assignment_is_valid(uce)) {
|
||
|
- free(uce);
|
||
|
- return -EINVAL;
|
||
|
- }
|
||
|
-
|
||
|
return strv_env_replace(environment, uce);
|
||
|
}
|
||
|
diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
|
||
|
index 3a2492dc6f..b14d62760f 100644
|
||
|
--- a/src/test/test-env-util.c
|
||
|
+++ b/src/test/test-env-util.c
|
||
|
@@ -319,10 +319,10 @@ static void test_env_assignment_is_valid(void) {
|
||
|
static void test_deserialize_environment(void) {
|
||
|
_cleanup_strv_free_ char **env = strv_new("A=1", NULL);
|
||
|
|
||
|
- assert_se(deserialize_environment(&env, "env=test") < 0);
|
||
|
assert_se(deserialize_environment(&env, "env=B=2") >= 0);
|
||
|
+ assert_se(deserialize_environment(&env, "env=FOO%%=a\\177b\\nc\\td e") >= 0);
|
||
|
|
||
|
- assert_se(strv_equal(env, STRV_MAKE("A=1", "B=2")));
|
||
|
+ assert_se(strv_equal(env, STRV_MAKE("A=1", "B=2", "FOO%%=a\177b\nc\td e")));
|
||
|
}
|
||
|
|
||
|
static void test_serialize_environment(void) {
|
||
|
@@ -334,6 +334,7 @@ static void test_serialize_environment(void) {
|
||
|
"B=2",
|
||
|
"C=ąęółń",
|
||
|
"D=D=a\\x0Ab",
|
||
|
+ "FOO%%=a\177b\nc\td e",
|
||
|
NULL);
|
||
|
_cleanup_strv_free_ char **env2 = NULL;
|
||
|
|