BASH PATCH REPORT ================= Bash-Release: 4.1 Patch-ID: bash41-006 Bug-Reported-by: Mike Frysinger Bug-Reference-ID: <201003210155.56618.vapier@gentoo.org> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00063.html Bug-Description: Bash did not correctly print/reproduce here documents attached to commands inside compound commands such as for and while. 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'): *** ../bash-4.1-patched/print_cmd.c 2009-09-16 15:32:26.000000000 -0400 --- print_cmd.c 2010-03-22 21:15:30.000000000 -0400 *************** *** 114,117 **** --- 114,123 ---- #define CHECK_XTRACE_FP xtrace_fp = (xtrace_fp ? xtrace_fp : stderr) + #define PRINT_DEFERRED_HEREDOCS(x) \ + do { \ + if (deferred_heredocs) \ + print_deferred_heredocs (x); \ + } while (0) + /* Non-zero means the stuff being printed is inside of a function def. */ static int inside_function_def; *************** *** 561,571 **** { print_for_command_head (for_command); - cprintf (";"); newline ("do\n"); indentation += indentation_amount; make_command_string_internal (for_command->action); semicolon (); indentation -= indentation_amount; newline ("done"); } --- 566,578 ---- { print_for_command_head (for_command); cprintf (";"); newline ("do\n"); + indentation += indentation_amount; make_command_string_internal (for_command->action); + PRINT_DEFERRED_HEREDOCS (""); semicolon (); indentation -= indentation_amount; + newline ("done"); } *** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 --- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 5 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 6 #endif /* _PATCHLEVEL_H_ */