summaryrefslogtreecommitdiff
path: root/0085-cdi-allow-env-variable-has-an-empty-value.patch
diff options
context:
space:
mode:
Diffstat (limited to '0085-cdi-allow-env-variable-has-an-empty-value.patch')
-rw-r--r--0085-cdi-allow-env-variable-has-an-empty-value.patch135
1 files changed, 135 insertions, 0 deletions
diff --git a/0085-cdi-allow-env-variable-has-an-empty-value.patch b/0085-cdi-allow-env-variable-has-an-empty-value.patch
new file mode 100644
index 0000000..a694d75
--- /dev/null
+++ b/0085-cdi-allow-env-variable-has-an-empty-value.patch
@@ -0,0 +1,135 @@
+From 9208d73274da0bd18c0d77cdf59ead3dc8e06021 Mon Sep 17 00:00:00 2001
+From: liuxu <liuxu156@huawei.com>
+Date: Fri, 10 May 2024 18:12:49 +0800
+Subject: [PATCH 85/85] cdi:allow env variable has an empty value
+
+Signed-off-by: liuxu <liuxu156@huawei.com>
+---
+ src/daemon/modules/spec/specs.c | 28 ++++++----------------------
+ test/specs/specs/specs_ut.cc | 16 ++++++++--------
+ 2 files changed, 14 insertions(+), 30 deletions(-)
+
+diff --git a/src/daemon/modules/spec/specs.c b/src/daemon/modules/spec/specs.c
+index 65a860d4..e779c22e 100644
+--- a/src/daemon/modules/spec/specs.c
++++ b/src/daemon/modules/spec/specs.c
+@@ -2607,17 +2607,11 @@ int spec_module_init(void)
+ static int add_env(defs_process *dp, const char *env, const char *key)
+ {
+ size_t i;
+- char *oci_key = NULL;
+- char *oci_value = NULL;
+- char *saveptr = NULL;
+- __isula_auto_free char *tmp_env = NULL;
+
+ for (i = 0; i < dp->env_len; i++) {
+- tmp_env = util_strdup_s(dp->env[i]);
+- oci_key = strtok_r(tmp_env, "=", &saveptr);
+- oci_value = strtok_r(NULL, "=", &saveptr);
+- if (oci_key == NULL || oci_value == NULL) {
+- ERROR("Bad env format");
++ __isula_auto_free char *oci_key = NULL;
++ if (util_valid_split_env(dp->env[i], &oci_key, NULL) < 0) {
++ ERROR("Bad env format, %s", dp->env[i]);
+ return -1;
+ }
+ if (strcmp(key, oci_key) == 0) {
+@@ -2625,8 +2619,6 @@ static int add_env(defs_process *dp, const char *env, const char *key)
+ dp->env[i] = util_strdup_s(env);
+ return 0;
+ }
+- free(tmp_env);
+- tmp_env = NULL;
+ }
+ if (util_mem_realloc((void **)&dp->env, (dp->env_len + 1) * sizeof(char *),
+ (void *)dp->env, dp->env_len * sizeof(char *)) != 0) {
+@@ -2641,10 +2633,6 @@ static int add_env(defs_process *dp, const char *env, const char *key)
+ int defs_process_add_multiple_env(defs_process *dp, const char **envs, size_t env_len)
+ {
+ size_t i;
+- char *key = NULL;
+- char *value = NULL;
+- char *saveptr = NULL;
+- __isula_auto_free char *tmp_env = NULL;
+
+ if (envs == NULL || env_len == 0) {
+ DEBUG("empty envs");
+@@ -2656,18 +2644,14 @@ int defs_process_add_multiple_env(defs_process *dp, const char **envs, size_t en
+ }
+
+ for (i = 0; i < env_len; i++) {
+- tmp_env = util_strdup_s(envs[i]);
+- key = strtok_r(tmp_env, "=", &saveptr);
+- value = strtok_r(NULL, "=", &saveptr);
+- if (key == NULL || value == NULL) {
+- ERROR("Bad env format: %s", tmp_env);
++ __isula_auto_free char *key = NULL;
++ if (util_valid_split_env(envs[i], &key, NULL) < 0) {
++ ERROR("Bad env format: %s", envs[i]);
+ return -1;
+ }
+ if (add_env(dp, envs[i], key) != 0) {
+ return -1;
+ }
+- free(tmp_env);
+- tmp_env = NULL;
+ }
+
+ return 0;
+diff --git a/test/specs/specs/specs_ut.cc b/test/specs/specs/specs_ut.cc
+index 47836e5b..3f108f0f 100644
+--- a/test/specs/specs/specs_ut.cc
++++ b/test/specs/specs/specs_ut.cc
+@@ -593,20 +593,20 @@ TEST_F(SpecsUnitTest, test_defs_process_add_multiple_env)
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
+ free(envs[0]);
+ envs[0] = util_strdup_s("key0=");
+- ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
++ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), 0);
+ free(envs[0]);
+ envs[0] = util_strdup_s("key0xxxx");
+- ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
++ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), 0);
+
+ free(dp->env[0]);
+ dp->env[0] = util_strdup_s("=value0");
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
+ free(dp->env[0]);
+ dp->env[0] = util_strdup_s("key0=");
+- ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
++ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), 0);
+ free(dp->env[0]);
+ dp->env[0] = util_strdup_s("key0xxxx");
+- ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
++ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), 0);
+
+ free_defs_process(dp);
+ free(envs[0]);
+@@ -644,20 +644,20 @@ TEST_F(SpecsUnitTest, test_spec_add_multiple_process_env)
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
+ free(envs[0]);
+ envs[0] = util_strdup_s("key0=");
+- ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
++ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), 0);
+ free(envs[0]);
+ envs[0] = util_strdup_s("key0xxxx");
+- ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
++ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), 0);
+
+ free(oci_spec->process->env[0]);
+ oci_spec->process->env[0] = util_strdup_s("=value0");
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
+ free(oci_spec->process->env[0]);
+ oci_spec->process->env[0] = util_strdup_s("key0=");
+- ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
++ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), 0);
+ free(oci_spec->process->env[0]);
+ oci_spec->process->env[0] = util_strdup_s("key0xxxx");
+- ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
++ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), 0);
+
+ free_oci_runtime_spec(oci_spec);
+ free(envs[0]);
+--
+2.34.1
+