1d932a
			     BASH PATCH REPORT
1d932a
			     =================
1d932a
1d932a
Bash-Release:	4.2
1d932a
Patch-ID:	bash42-046
1d932a
1d932a
Bug-Reported-by:	"Theodoros V. Kalamatianos" <thkala@gmail.com>
1d932a
Bug-Reference-ID:	<20140112011131.GE17667@infinity.metashade.com>
1d932a
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-01/msg00044.html
1d932a
1d932a
Bug-Description:
1d932a
1d932a
Bash-4.2 patch 32 introduced a problem with "$@" and arrays expanding empty
1d932a
positional parameters or array elements when using substring expansion,
1d932a
pattern substitution, or case modfication.  The empty parameters or array
1d932a
elements are removed instead of expanding to empty strings ("").
1d932a
1d932a
Patch (apply with `patch -p0'):
1d932a
1d932a
*** ../bash-4.2-patched/subst.c	2012-12-31 11:52:56.000000000 -0500
1d932a
--- subst.c	2014-03-31 14:19:56.000000000 -0400
1d932a
***************
1d932a
*** 7243,7247 ****
1d932a
        ret = alloc_word_desc ();
1d932a
        ret->word = temp1;
1d932a
!       if (temp1 && QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
1d932a
  	ret->flags |= W_QUOTED|W_HASQUOTEDNULL;
1d932a
        return ret;
1d932a
--- 7243,7253 ----
1d932a
        ret = alloc_word_desc ();
1d932a
        ret->word = temp1;
1d932a
!       /* We test quoted_dollar_atp because we want variants with double-quoted
1d932a
! 	 "$@" to take a different code path. In fact, we make sure at the end
1d932a
! 	 of expand_word_internal that we're only looking at these flags if
1d932a
! 	 quoted_dollar_at == 0. */
1d932a
!       if (temp1 && 
1d932a
!           (quoted_dollar_atp == 0 || *quoted_dollar_atp == 0) &&
1d932a
! 	  QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
1d932a
  	ret->flags |= W_QUOTED|W_HASQUOTEDNULL;
1d932a
        return ret;
1d932a
*** ../bash-4.2-patched/patchlevel.h	Sat Jun 12 20:14:48 2010
1d932a
--- patchlevel.h	Thu Feb 24 21:41:34 2011
1d932a
***************
1d932a
*** 26,30 ****
1d932a
     looks for to find the patch level (for the sccs version string). */
1d932a
  
1d932a
! #define PATCHLEVEL 45
1d932a
  
1d932a
  #endif /* _PATCHLEVEL_H_ */
1d932a
--- 26,30 ----
1d932a
     looks for to find the patch level (for the sccs version string). */
1d932a
  
1d932a
! #define PATCHLEVEL 46
1d932a
  
1d932a
  #endif /* _PATCHLEVEL_H_ */