[PATCH 1/3] discover/grub2: Fix handling of positional parameters
Sam Mendoza-Jonas
sam at mendozajonas.com
Tue Mar 15 14:27:01 AEDT 2016
Good catch, merged as c19daa6.
On Wed, Mar 02, 2016 at 08:59:02AM -0800, Alan Dunn wrote:
> Positional parameters are set in the environment with '$' prepended to
> the name. This causes lookups to fail because parameter lookups don't
> include the '$'.
>
> TESTED:
> Added a test that covers positional parameters in GRUB2 parser.
> Build succeeds, tests pass.
>
> Bootstrapped-by: Nancy Yuen <yuenn at google.com>
> Signed-off-by: Alan Dunn <amdunn at google.com>
> ---
> discover/grub2/script.c | 2 +-
> test/parser/Makefile.am | 1 +
> test/parser/test-grub2-pos-param.c | 35 +++++++++++++++++++++++++++++++++++
> 3 files changed, 37 insertions(+), 1 deletion(-)
> create mode 100644 test/parser/test-grub2-pos-param.c
>
> diff --git a/discover/grub2/script.c b/discover/grub2/script.c
> index f521681..48c963e 100644
> --- a/discover/grub2/script.c
> +++ b/discover/grub2/script.c
> @@ -380,7 +380,7 @@ static int function_invoke(struct grub2_script *script,
>
> /* set positional parameters */
> for (i = 0; i < argc; i++) {
> - name = talloc_asprintf(script, "$%d", i);
> + name = talloc_asprintf(script, "%d", i);
> script_env_set(script, name, argv[i]);
> }
>
> diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
> index dddb472..4bf9bc0 100644
> --- a/test/parser/Makefile.am
> +++ b/test/parser/Makefile.am
> @@ -26,6 +26,7 @@ parser_TESTS = \
> test/parser/test-grub2-multiple-resolve \
> test/parser/test-grub2-multiple-id \
> test/parser/test-grub2-single-line-if \
> + test/parser/test-grub2-pos-param \
> test/parser/test-grub2-load-env \
> test/parser/test-grub2-save-env \
> test/parser/test-grub2-save-env-dash-f \
> diff --git a/test/parser/test-grub2-pos-param.c b/test/parser/test-grub2-pos-param.c
> new file mode 100644
> index 0000000..09ac8fc
> --- /dev/null
> +++ b/test/parser/test-grub2-pos-param.c
> @@ -0,0 +1,35 @@
> +
> +#include "parser-test.h"
> +
> +#if 0 /* PARSER_EMBEDDED_CONFIG */
> +
> +function set_params_var {
> + params="$1 $2"
> +}
> +menuentry 'Linux' {
> + set_params_var abc 123
> + linux test_kernel $params
> +}
> +
> +#endif
> +
> +void run_test(struct parser_test *test)
> +{
> + struct discover_boot_option *opt;
> + struct discover_context *ctx;
> +
> + test_read_conf_embedded(test, "/boot/grub/grub.cfg");
> +
> + test_run_parser(test, "grub2");
> +
> + ctx = test->ctx;
> +
> + check_boot_option_count(ctx, 1);
> + opt = get_boot_option(ctx, 0);
> +
> + check_name(opt, "Linux");
> + /* The linux command, $params is expected to have been set when
> + * set_params was called in menuentry.
> + */
> + check_args(opt, "abc 123");
> +}
> --
> 2.7.0.rc3.207.g0ac5344
>
> _______________________________________________
> Petitboot mailing list
> Petitboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/petitboot
More information about the Petitboot
mailing list