|
Zbigniew Jędrzejewski-Szmek |
d743bb |
From 429a69d0dd273a431f396fe8f5846a8e8a1a0ac7 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
From: Ronny Chevalier <chevalier.ronny@gmail.com>
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
Date: Sun, 14 May 2017 16:30:40 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
Subject: [PATCH] env-util: fix memory leak (#5962)
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
If cunescape succeeds, but the assignment is not valid, uce is not freed.
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
(cherry picked from commit 16eefcafedeecf0e282add6c1eadeebcb3ad0609)
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
---
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
src/basic/env-util.c | 4 +++-
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
src/test/test-env-util.c | 10 ++++++++++
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
2 files changed, 13 insertions(+), 1 deletion(-)
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
index 1ec574e8a0..e79b441ab6 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
--- a/src/basic/env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+++ b/src/basic/env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
@@ -799,8 +799,10 @@ int deserialize_environment(char ***environment, const char *line) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
- if (!env_assignment_is_valid(uce))
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ if (!env_assignment_is_valid(uce)) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ free(uce);
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
return -EINVAL;
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
return strv_env_replace(environment, uce);
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
index e5cc2a2df8..904c50f0ed 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
--- a/src/test/test-env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+++ b/src/test/test-env-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
@@ -314,6 +314,15 @@ static void test_env_assignment_is_valid(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
assert_se(!env_assignment_is_valid("głąb=printf \"\x1b]0;<mock-chroot>\x07<mock-chroot>\""));
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+static void test_deserialize_environment(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ _cleanup_strv_free_ char **env = strv_new("A=1", NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ assert_se(deserialize_environment(&env, "env=test") < 0);
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ assert_se(deserialize_environment(&env, "env=B=2") >= 0);
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ assert_se(strv_equal(env, STRV_MAKE("A=1", "B=2")));
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
int main(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
test_strv_env_delete();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
test_strv_env_get();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
@@ -330,6 +339,7 @@ int main(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
test_env_name_is_valid();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
test_env_value_is_valid();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
test_env_assignment_is_valid();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
+ test_deserialize_environment();
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
d743bb |
}
|