]> git.ozlabs.org Git - petitboot/commitdiff
In GRUB2 parser save_env, treat unset variable value as empty
authorAlan Dunn <amdunn@google.com>
Tue, 15 Mar 2016 00:40:47 +0000 (17:40 -0700)
committerSam Mendoza-Jonas <sam@mendozajonas.com>
Tue, 15 Mar 2016 03:10:00 +0000 (14:10 +1100)
It seems better to treat unset variable values as empty rather than
crashing in save_env.  While GRUB's behavior is actually to delete the
variable from the environment block, it seems useful to at least not
crash while later on someone can do further work to improve GRUB
compatibility if desired.

Tested:
 Modified test-grub2-save-env to cover this case.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
discover/grub2/env.c
test/parser/test-grub2-save-env.c

index 3598927e0f295c5656e2fa93ee3192d32a18b92e..7eda0953fd4f5ce7d1cd6b6f20964a1f62f16bed 100644 (file)
@@ -257,6 +257,10 @@ int builtin_save_env(struct grub2_script *script,
 
                name = argv[i];
                value = script_env_get(script, name);
+               if (!value) {
+                       pb_log("Saved unset environment variable %s!\n", name);
+                       value = "";
+               }
 
                update_env(buf + siglen, len - siglen, name, value);
        }
index 68e91bdbb73d796c2dc79e934f5eeebab7745578..36725e2181fa2f4dbefe44bed04c726e0832b7b7 100644 (file)
@@ -74,6 +74,12 @@ struct env_test {
                "a=xxx\nsave_env a\n",
                "q=q\na=x\nr=r\n#",
        },
+       {
+               "unset-var",
+               "##############",
+               "save_env an_unset_var\n",
+               "an_unset_var=\n"
+       }
 };
 
 static void run_env_test(struct parser_test *test, struct env_test *envtest)