From cde393c9a3d930df33a15d30f579c5e985a79c1e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 21 Jun 2012 22:02:09 +0200 Subject: [PATCH] * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape blocks. --- ChangeLog | 5 +++++ grub-core/script/execute.c | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf5279ed2..bb81ff123 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-06-21 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape + blocks. + 2012-06-21 Vladimir Serbinenko * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Fix double diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c index 8855bc126..b5e6eb05e 100644 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c @@ -642,11 +642,23 @@ grub_script_arglist_to_argv (struct grub_script_arglist *arglist, break; case GRUB_SCRIPT_ARG_TYPE_BLOCK: - if (grub_script_argv_append (&result, "{", 1) - || grub_script_argv_append (&result, arg->str, - grub_strlen (arg->str)) - || grub_script_argv_append (&result, "}", 1)) - goto fail; + { + char *p; + if (grub_script_argv_append (&result, "{", 1)) + goto fail; + p = wildcard_escape (arg->str); + if (!p) + goto fail; + if (grub_script_argv_append (&result, p, + grub_strlen (p))) + { + grub_free (p); + goto fail; + } + grub_free (p); + if (grub_script_argv_append (&result, "}", 1)) + goto fail; + } result.script = arg->script; break;