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

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

Bug-Reported-by:	Ewan Mellor <Ewan.Mellor@eu.citrix.com>
Bug-Reference-ID:	<6005BE083BF501439A84DC3523BAC82DC4B964FD12@LONPMAILBOX01.citrite.net>
Bug-Reference-URL:	

Bug-Description:

Under some circumstances, an exit trap triggered by a bad substitution
error when errexit is enabled will cause the shell to exit with an
incorrect exit status (0).

Patch (apply with `patch -p0'):

*** ../bash-4.2-patched/subst.c	2011-11-21 12:04:38.000000000 -0500
--- ./subst.c	2012-02-08 13:36:28.000000000 -0500
***************
*** 7275,7278 ****
--- 7281,7285 ----
      case '\0':
      bad_substitution:
+       last_command_exit_value = EXECUTION_FAILURE;
        report_error (_("%s: bad substitution"), string ? string : "??");
        FREE (value);
*** ../bash-4.2-patched/error.c	2009-08-21 22:31:31.000000000 -0400
--- ./error.c	2012-02-25 15:54:40.000000000 -0500
***************
*** 201,205 ****
    va_end (args);
    if (exit_immediately_on_error)
!     exit_shell (1);
  }
  
--- 201,209 ----
    va_end (args);
    if (exit_immediately_on_error)
!     {
!       if (last_command_exit_value == 0)
! 	last_command_exit_value = 1;
!       exit_shell (last_command_exit_value);
!     }
  }
  
*** ../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 22
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 23
  
  #endif /* _PATCHLEVEL_H_ */
