BASH PATCH REPORT ================= Bash-Release: 4.0 Patch-ID: bash40-010 Bug-Reported-by: Mike Frysinger Bug-Reference-ID: <200903030122.56206.vapier@gentoo.org> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00023.html Bug-Description: Bash has problems parsing comments in case statements when they appear in $(...) subshells. Patch: *** ../bash-4.0/parse.y 2009-03-07 15:18:35.000000000 -0500 --- parse.y 2009-03-07 14:16:32.000000000 -0500 *************** *** 3413,3419 **** tflags &= ~LEX_RESWDOK; } ! else if (shellbreak (ch) == 0) { ! tflags &= ~LEX_RESWDOK; /*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/ } --- 3415,3433 ---- tflags &= ~LEX_RESWDOK; } ! else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0))) ! ; /* don't modify LEX_RESWDOK if we're starting a comment */ ! else if MBTEST((tflags & LEX_INCASE) && ch != '\n') ! /* If we can read a reserved word and we're in case, we're at the ! point where we can read a new pattern list or an esac. We ! handle the esac case above. If we read a newline, we want to ! leave LEX_RESWDOK alone. If we read anything else, we want to ! turn off LEX_RESWDOK, since we're going to read a pattern list. */ { ! tflags &= ~LEX_RESWDOK; ! /*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/ ! } ! else if MBTEST(shellbreak (ch) == 0) ! { ! tflags &= ~LEX_RESWDOK; /*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/ } *** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500 --- patchlevel.h 2009-02-22 16:11:31.000000000 -0500 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 9 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 10 #endif /* _PATCHLEVEL_H_ */