components/bash/patches/bash42-046.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Thu, 08 Oct 2015 23:00:32 -0700
changeset 4929 29020dc0c404
parent 2111 4988638320c4
permissions -rw-r--r--
Added tag s12-85 for changeset 264d4a0eb386

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

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

Bug-Reported-by:	"Theodoros V. Kalamatianos" <[email protected]>
Bug-Reference-ID:	<[email protected]>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-01/msg00044.html

Bug-Description:

Bash-4.2 patch 32 introduced a problem with "$@" and arrays expanding empty
positional parameters or array elements when using substring expansion,
pattern substitution, or case modfication.  The empty parameters or array
elements are removed instead of expanding to empty strings ("").

Patch (apply with `patch -p0'):

*** ../bash-4.2-patched/subst.c	2012-12-31 11:52:56.000000000 -0500
--- subst.c	2014-03-31 14:19:56.000000000 -0400
***************
*** 7243,7247 ****
        ret = alloc_word_desc ();
        ret->word = temp1;
!       if (temp1 && QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
  	ret->flags |= W_QUOTED|W_HASQUOTEDNULL;
        return ret;
--- 7243,7253 ----
        ret = alloc_word_desc ();
        ret->word = temp1;
!       /* We test quoted_dollar_atp because we want variants with double-quoted
! 	 "$@" to take a different code path. In fact, we make sure at the end
! 	 of expand_word_internal that we're only looking at these flags if
! 	 quoted_dollar_at == 0. */
!       if (temp1 && 
!           (quoted_dollar_atp == 0 || *quoted_dollar_atp == 0) &&
! 	  QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
  	ret->flags |= W_QUOTED|W_HASQUOTEDNULL;
        return ret;
*** ../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 45
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 46
  
  #endif /* _PATCHLEVEL_H_ */