| BASH PATCH REPORT |
| ================= |
| |
| Bash-Release: 4.1 |
| Patch-ID: bash41-006 |
| |
| Bug-Reported-by: Mike Frysinger <vapier@gentoo.org> |
| 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_ */ |