BASH PATCH REPORT ================= Bash-Release: 4.2 Patch-ID: bash42-010 Bug-Reported-by: Mike Frysinger Bug-Reference-ID: <201104122356.20160.vapier@gentoo.org> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-04/msg00058.html Bug-Description: Bash did not correctly print/reproduce here documents attached to commands inside compound commands such as arithmetic for loops and user-specified subshells. This affected the execution of such commands inside a shell function when the function definition is saved and later restored using `.' or `eval'. Patch (apply with `patch -p0'): --- a/print_cmd.c +++ b/print_cmd.c @@ -315,6 +315,7 @@ make_command_string_internal (command) cprintf ("( "); skip_this_indent++; make_command_string_internal (command->value.Subshell->command); + PRINT_DEFERRED_HEREDOCS (""); cprintf (" )"); break; @@ -592,6 +593,7 @@ print_arith_for_command (arith_for_comma newline ("do\n"); indentation += indentation_amount; make_command_string_internal (arith_for_command->action); + PRINT_DEFERRED_HEREDOCS (""); semicolon (); indentation -= indentation_amount; newline ("done"); @@ -653,6 +655,7 @@ print_group_command (group_command) } make_command_string_internal (group_command->command); + PRINT_DEFERRED_HEREDOCS (""); if (inside_function_def) { --- a/patchlevel.h +++ b/patchlevel.h @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 9 +#define PATCHLEVEL 10 #endif /* _PATCHLEVEL_H_ */