Tim Waugh 393b61
			     BASH PATCH REPORT
Tim Waugh 393b61
			     =================
Tim Waugh 393b61
Tim Waugh 393b61
Bash-Release: 3.2
Tim Waugh 393b61
Patch-ID: bash32-004
Tim Waugh 393b61
Tim Waugh 393b61
Bug-Reported-by:	Stuart Shelton <srcshelton@gmail.com>
Tim Waugh 393b61
Bug-Reference-ID:	<619141e40610261203y6cda5aa6i23cb24c7aeba996e@mail.gmail.com>
Tim Waugh 393b61
Bug-Reference-URL:	
Tim Waugh 393b61
Tim Waugh 393b61
Bug-Description:
Tim Waugh 393b61
Tim Waugh 393b61
A bug in the parameter pattern substitution implementation treated a pattern
Tim Waugh 393b61
whose first character was `/' (after expansion) as specifying global
Tim Waugh 393b61
replacement.
Tim Waugh 393b61
Tim Waugh 393b61
Patch:
Tim Waugh 393b61
Tim Waugh 393b61
*** ../bash-3.2/subst.c	Tue Sep 19 08:35:09 2006
Tim Waugh 393b61
--- subst.c	Thu Oct 26 09:17:50 2006
Tim Waugh 393b61
***************
Tim Waugh 393b61
*** 5707,5712 ****
Tim Waugh 393b61
--- 5707,5717 ----
Tim Waugh 393b61
    vtype &= ~VT_STARSUB;
Tim Waugh 393b61
  
Tim Waugh 393b61
    mflags = 0;
Tim Waugh 393b61
+   if (patsub && *patsub == '/')
Tim Waugh 393b61
+     {
Tim Waugh 393b61
+       mflags |= MATCH_GLOBREP;
Tim Waugh 393b61
+       patsub++;
Tim Waugh 393b61
+     }
Tim Waugh 393b61
  
Tim Waugh 393b61
    /* Malloc this because expand_string_if_necessary or one of the expansion
Tim Waugh 393b61
       functions in its call chain may free it on a substitution error. */
Tim Waugh 393b61
***************
Tim Waugh 393b61
*** 5741,5753 ****
Tim Waugh 393b61
      }
Tim Waugh 393b61
  
Tim Waugh 393b61
    /* ksh93 doesn't allow the match specifier to be a part of the expanded
Tim Waugh 393b61
!      pattern.  This is an extension. */
Tim Waugh 393b61
    p = pat;
Tim Waugh 393b61
!   if (pat && pat[0] == '/')
Tim Waugh 393b61
!     {
Tim Waugh 393b61
!       mflags |= MATCH_GLOBREP|MATCH_ANY;
Tim Waugh 393b61
!       p++;
Tim Waugh 393b61
!     }
Tim Waugh 393b61
    else if (pat && pat[0] == '#')
Tim Waugh 393b61
      {
Tim Waugh 393b61
        mflags |= MATCH_BEG;
Tim Waugh 393b61
--- 5746,5757 ----
Tim Waugh 393b61
      }
Tim Waugh 393b61
  
Tim Waugh 393b61
    /* ksh93 doesn't allow the match specifier to be a part of the expanded
Tim Waugh 393b61
!      pattern.  This is an extension.  Make sure we don't anchor the pattern
Tim Waugh 393b61
!      at the beginning or end of the string if we're doing global replacement,
Tim Waugh 393b61
!      though. */
Tim Waugh 393b61
    p = pat;
Tim Waugh 393b61
!   if (mflags & MATCH_GLOBREP)
Tim Waugh 393b61
!     mflags |= MATCH_ANY;
Tim Waugh 393b61
    else if (pat && pat[0] == '#')
Tim Waugh 393b61
      {
Tim Waugh 393b61
        mflags |= MATCH_BEG;
Tim Waugh 393b61
*** ../bash-3.2/tests/new-exp.right	Thu Aug 10 12:00:00 2006
Tim Waugh 393b61
--- tests/new-exp.right	Sun Oct 29 16:03:36 2006
Tim Waugh 393b61
***************
Tim Waugh 393b61
*** 430,436 ****
Tim Waugh 393b61
  Case06---1---A B C::---
Tim Waugh 393b61
  Case07---3---A:B:C---
Tim Waugh 393b61
  Case08---3---A:B:C---
Tim Waugh 393b61
! ./new-exp.tests: line 506: /${$(($#-1))}: bad substitution
Tim Waugh 393b61
  argv[1] = 
Tim Waugh 393b61
  argv[2] = 
Tim Waugh 393b61
  argv[3] = <c>
Tim Waugh 393b61
--- 430,436 ----
Tim Waugh 393b61
  Case06---1---A B C::---
Tim Waugh 393b61
  Case07---3---A:B:C---
Tim Waugh 393b61
  Case08---3---A:B:C---
Tim Waugh 393b61
! ./new-exp.tests: line 506: ${$(($#-1))}: bad substitution
Tim Waugh 393b61
  argv[1] = 
Tim Waugh 393b61
  argv[2] = 
Tim Waugh 393b61
  argv[3] = <c>
Tim Waugh 393b61
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
Tim Waugh 393b61
--- patchlevel.h	Mon Oct 16 14:22:54 2006
Tim Waugh 393b61
***************
Tim Waugh 393b61
*** 26,30 ****
Tim Waugh 393b61
     looks for to find the patch level (for the sccs version string). */
Tim Waugh 393b61
  
Tim Waugh 393b61
! #define PATCHLEVEL 3
Tim Waugh 393b61
  
Tim Waugh 393b61
  #endif /* _PATCHLEVEL_H_ */
Tim Waugh 393b61
--- 26,30 ----
Tim Waugh 393b61
     looks for to find the patch level (for the sccs version string). */
Tim Waugh 393b61
  
Tim Waugh 393b61
! #define PATCHLEVEL 4
Tim Waugh 393b61
  
Tim Waugh 393b61
  #endif /* _PATCHLEVEL_H_ */