			     BASH PATCH REPORT
			     =================

Bash-Release:	4.2
Patch-ID:	bash42-001

Bug-Reported-by:	Juergen Daubert <jue@jue.li>
Bug-Reference-ID:	<20110214175132.GA19813@jue.netz>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00125.html

Bug-Description:

When running in Posix mode, bash does not correctly expand the right-hand
side of a double-quoted word expansion containing single quotes.

Patch (apply with `patch -p0'):

*** ../bash-4.2-patched/subst.c	2011-01-02 16:12:51.000000000 -0500
--- ./subst.c	2011-02-19 00:00:00.000000000 -0500
***************
*** 1380,1387 ****
  
    /* The handling of dolbrace_state needs to agree with the code in parse.y:
!      parse_matched_pair() */
!   dolbrace_state = 0;
!   if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
!     dolbrace_state = (flags & SX_POSIXEXP) ? DOLBRACE_QUOTE : DOLBRACE_PARAM;
  
    i = *sindex;
--- 1380,1389 ----
  
    /* The handling of dolbrace_state needs to agree with the code in parse.y:
!      parse_matched_pair().  The different initial value is to handle the
!      case where this function is called to parse the word in
!      ${param op word} (SX_WORD). */
!   dolbrace_state = (flags & SX_WORD) ? DOLBRACE_WORD : DOLBRACE_PARAM;
!   if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && (flags & SX_POSIXEXP))
!     dolbrace_state = DOLBRACE_QUOTE;
  
    i = *sindex;
***************
*** 7177,7181 ****
        /* Extract the contents of the ${ ... } expansion
  	 according to the Posix.2 rules. */
!       value = extract_dollar_brace_string (string, &sindex, quoted, (c == '%' || c == '#') ? SX_POSIXEXP : 0);
        if (string[sindex] == RBRACE)
  	sindex++;
--- 7181,7185 ----
        /* Extract the contents of the ${ ... } expansion
  	 according to the Posix.2 rules. */
!       value = extract_dollar_brace_string (string, &sindex, quoted, (c == '%' || c == '#' || c =='/' || c == '^' || c == ',' || c ==':') ? SX_POSIXEXP|SX_WORD : SX_WORD);
        if (string[sindex] == RBRACE)
  	sindex++;
*** ../bash-4.2-patched/subst.h	2010-12-02 20:21:29.000000000 -0500
--- ./subst.h	2011-02-16 21:12:09.000000000 -0500
***************
*** 57,60 ****
--- 57,61 ----
  #define SX_ARITHSUB	0x0080	/* extracting $(( ... )) (currently unused) */
  #define SX_POSIXEXP	0x0100	/* extracting new Posix pattern removal expansions in extract_dollar_brace_string */
+ #define SX_WORD		0x0200	/* extracting word in ${param op word} */
  
  /* Remove backslashes which are quoting backquotes from STRING.  Modifies
*** ../bash-4.2-patched/patchlevel.h	Sat Jun 12 20:14:48 2010
--- ./patchlevel.h	Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 0
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 1
  
  #endif /* _PATCHLEVEL_H_ */
