From: Vladimir 'phcoder' Serbinenko Date: Thu, 21 Jun 2012 20:02:09 +0000 (+0200) Subject: * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape X-Git-Tag: 2.00~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cde393c9a3d930df33a15d30f579c5e985a79c1e;p=thirdparty%2Fgrub.git * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape blocks. --- 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;