15754923 SUNBT7111705 Upgrade bash to 4.2
authorStefan Teleman <stefan.teleman@oracle.com>
Thu, 13 Dec 2012 15:52:21 -0800
changeset 1082 6d49548fa9da
parent 1081 3d086c82286d
child 1083 dcfa3638d3e2
15754923 SUNBT7111705 Upgrade bash to 4.2
components/bash/Makefile
components/bash/bash.license
components/bash/bash.p5m
components/bash/patches/bash41-001.patch
components/bash/patches/bash41-002.patch
components/bash/patches/bash41-003.patch
components/bash/patches/bash41-004.patch
components/bash/patches/bash41-005.patch
components/bash/patches/bash41-006.patch
components/bash/patches/bash41-007.patch
components/bash/patches/bash41-008.patch
components/bash/patches/bash41-009.patch
components/bash/patches/bash41-010.patch
components/bash/patches/bash41-011.patch
components/bash/patches/bash42-001.patch
components/bash/patches/bash42-002.patch
components/bash/patches/bash42-003.patch
components/bash/patches/bash42-004.patch
components/bash/patches/bash42-005.patch
components/bash/patches/bash42-006.patch
components/bash/patches/bash42-007.patch
components/bash/patches/bash42-008.patch
components/bash/patches/bash42-009.patch
components/bash/patches/bash42-010.patch
components/bash/patches/bash42-011.patch
components/bash/patches/bash42-012.patch
components/bash/patches/bash42-013.patch
components/bash/patches/bash42-014.patch
components/bash/patches/bash42-015.patch
components/bash/patches/bash42-016.patch
components/bash/patches/bash42-017.patch
components/bash/patches/bash42-018.patch
components/bash/patches/bash42-019.patch
components/bash/patches/bash42-020.patch
components/bash/patches/bash42-021.patch
components/bash/patches/bash42-022.patch
components/bash/patches/bash42-023.patch
components/bash/patches/bash42-024.patch
components/bash/patches/bash42-025.patch
components/bash/patches/bash42-026.patch
components/bash/patches/bash42-027.patch
components/bash/patches/bash42-028.patch
components/bash/patches/bash42-029.patch
components/bash/patches/bash42-030.patch
components/bash/patches/bash42-031.patch
components/bash/patches/bash42-032.patch
components/bash/patches/bash42-033.patch
components/bash/patches/bash42-034.patch
components/bash/patches/bash42-035.patch
components/bash/patches/bash42-036.patch
components/bash/patches/bash42-037.patch
components/bash/patches/bash42-038.patch
components/bash/patches/bash42-039.patch
components/bash/patches/solaris-002.Makefile.in.3.patch
components/bash/patches/solaris-004.snprintf.c.patch
components/bash/patches/solaris-005.variables.c.patch
components/bash/patches/solaris-006.signames.c.patch
components/bash/patches/solaris-008.xmbsrtowcs.c.patch
components/bash/patches/solaris-009.configure.patch
components/bash/patches/solaris-013.bashref.info.patch
components/bash/patches/solaris-014.bash.man.patch
components/bash/patches/solaris-015.rbash.man.patch
components/bash/patches/solaris-016.eaccess.c.patch
components/bash/patches/solaris-016.run-all.patch
components/bash/patches/solaris-017.printf2.sub.patch
components/bash/patches/solaris-018.posixexp2.tests.patch
components/bash/patches/solaris-019.eaccess.c.patch
components/bash/patches/solaris-020.xcase.c.patch
--- a/components/bash/Makefile	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/Makefile	Thu Dec 13 15:52:21 2012 -0800
@@ -23,12 +23,12 @@
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		bash
-COMPONENT_VERSION=	4.1
+COMPONENT_VERSION=	4.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_PROJECT_URL=	http://www.gnu.org/software/bash/
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
-COMPONENT_ARCHIVE_HASH=	\
-    sha256:3f627124a83c6d34db503a923e20710d370573a29dd5d11d6f116d1aee7be1da
+COMPONENT_ARCHIVE_HASH = \
+    sha256:a27a1179ec9c0830c65c6aa5d7dab60f7ce1a2a608618570f96bfa72e95ab3d8
 COMPONENT_ARCHIVE_URL=	http://ftp.gnu.org/gnu/bash/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	utility/bash
 
@@ -107,14 +107,14 @@
 CONFIGURE_OPTIONS  += 		--enable-separate-helpfiles	
 CONFIGURE_OPTIONS  += 		--enable-single-help-strings	
 CONFIGURE_OPTIONS  += 		--disable-strict-posix-default	
-CONFIGURE_OPTIONS  += 		--enable-usg-echo-default	
-CONFIGURE_OPTIONS  += 		--enable-xpg-echo-default	
+CONFIGURE_OPTIONS  += 		--enable-usg-echo-default=yes
+CONFIGURE_OPTIONS  += 		--enable-xpg-echo-default=yes
 CONFIGURE_OPTIONS  += 		--enable-mem-scramble	
 CONFIGURE_OPTIONS  += 		--disable-profiling	
 CONFIGURE_OPTIONS  += 		--enable-static-link	
 CONFIGURE_OPTIONS  += 		--enable-largefile
 CONFIGURE_OPTIONS  += 		--enable-nls	
-CONFIGURE_OPTIONS  += 		--with-bash-malloc	
+CONFIGURE_OPTIONS  += 		--with-bash-malloc=yes
 CONFIGURE_OPTIONS  += 		--with-curses	
 CONFIGURE_OPTIONS  += 		--with-installed-readline=no	
 CONFIGURE_OPTIONS  +=		--infodir=$(CONFIGURE_INFODIR)
--- a/components/bash/bash.license	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/bash.license	Thu Dec 13 15:52:21 2012 -0800
@@ -1,8 +1,7 @@
-For the avoidance of doubt, except that if any license choice other than
-GPL or LGPL is available it will apply instead, Oracle elects to use
-only the General Public License version 3 (GPLv3) at this time for any
-software where a choice of GPL license versions is made available with
-the language indicating that GPLv3 or any later version may be used.
+-------------
+- bash v4.2 -
+-------------
+
 ------------------------------------------------------------------
 
 		     GNU GENERAL PUBLIC LICENSE
@@ -1132,3 +1131,4 @@
 recommend releasing these examples in parallel under your choice of
 free software license, such as the GNU General Public License,
 to permit their use in free software.
+
--- a/components/bash/bash.p5m	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/bash.p5m	Thu Dec 13 15:52:21 2012 -0800
@@ -29,7 +29,7 @@
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid \
-    value=PSARC/1999/555
+    value=PSARC/2000/488
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 #
 dir path=etc
@@ -214,10 +214,13 @@
 file path=usr/share/man/man1/bashbug.1
 file rbash.1 path=usr/share/man/man1/rbash.1
 #
-legacy pkg=SUNWbash desc="GNU Bourne-Again shell (bash)" \
+legacy pkg=SUNWbash desc="GNU Bourne-Again shell (bash) version 4.2" \
     name="GNU Bourne-Again shell (bash)"
+legacy pkg=SUNWbashr \
+    desc="GNU Bourne-Again shell (bash) version 4.2  (root package)" \
+    name="GNU Bourne-Again shell (bash) (root)"
 #
-license bash.license license="GPLv3, FDLv1.3"
+license bash.license license="GPLv3, FDLv1.2"
 #
 link path=usr/bin/rbash target=./bash
 link path=usr/gnu/bin/sh target=../../bin/bash
--- a/components/bash/patches/bash41-001.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-001
-
-Bug-Reported-by:	Yann Rouillard <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00018.html
-
-Bug-Description:
-
-A prototype for vsnprintf was incorrect, and caused compilation failures
-on systems that did not have a suitable vsnprintf, but had a declaration in
-one of the system header files.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/builtins/printf.def	2009-11-20 15:31:23.000000000 -0500
---- builtins/printf.def	2010-01-07 08:50:06.000000000 -0500
-***************
-*** 173,177 ****
-  
-  #if !HAVE_VSNPRINTF
-! extern int vsnprintf __P((char *, size_t, const char *, ...)) __attribute__((__format__ (printf, 3, 4)));
-  #endif
-  
---- 173,177 ----
-  
-  #if !HAVE_VSNPRINTF
-! extern int vsnprintf __P((char *, size_t, const char *, va_list)) __attribute__((__format__ (printf, 3, 0)));
-  #endif
-  
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 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_ */
--- a/components/bash/patches/bash41-002.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-002
-
-Bug-Reported-by:	[email protected]
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00017.html
-
-Bug-Description:
-
-Bash-4.1/Readline-6.1 introduced a hook function that allows applications
-to rewrite or modify filenames read from the file system before comparing
-them with a word to be completed.  The converted filename, if it matches,
-needs to be inserted into the line buffer, replacing the original contents.
-
-This fixes a completion bug on Mac OS X involving filenames containing
-UTF-8 characters.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/lib/readline/complete.c	2009-11-29 18:39:30.000000000 -0500
---- lib/readline/complete.c	2010-01-06 08:30:23.000000000 -0500
-***************
-*** 2139,2143 ****
-        if (filename_len == 0)
-  	{
-! 	  if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name))
-  	    continue;
-  
---- 2139,2143 ----
-        if (filename_len == 0)
-  	{
-! 	  if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn))
-  	    continue;
-  
-***************
-*** 2220,2224 ****
-  	    }
-  
-! 	  strcpy (temp + dirlen, entry->d_name);
-  	}
-        else
---- 2220,2224 ----
-  	    }
-  
-! 	  strcpy (temp + dirlen, convfn);
-  	}
-        else
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 1
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 2
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-003.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-003
-
-Bug-Reported-by:	[email protected]
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00135.html
-
-Bug-Description:
-
-If command completion is attempted on a word with a quoted globbing
-character (e.g., `*' or `?'), bash can reference a NULL pointer and
-dump core.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/bashline.c	2009-10-24 14:10:19.000000000 -0400
---- bashline.c	2010-01-30 21:53:49.000000000 -0500
-***************
-*** 1681,1685 ****
-       characters in the common prefix are bad) will ever be returned on
-       regular completion. */
-!   if (glob_pattern_p (hint))
-      {
-        if (state == 0)
---- 1681,1685 ----
-       characters in the common prefix are bad) will ever be returned on
-       regular completion. */
-!   if (globpat)
-      {
-        if (state == 0)
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 2
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 3
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-004.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-004
-
-Bug-Reported-by:	Crestez Dan Leonard <[email protected]>
-Bug-Reference-ID:	<1265592839.30682.21.camel@deskbox>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00034.html
-
-Bug-Description:
-
-When running in Posix mode and executing a shell function without local
-variables, bash will not propagate a variable in a special builtin's temporary
-environment to have global scope.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/variables.c	2009-11-03 14:13:58.000000000 -0500
---- variables.c	2010-02-08 17:36:18.000000000 -0500
-***************
-*** 3809,3812 ****
---- 3809,3817 ----
-    if (tempvar_p (var) && (posixly_correct || (var->attributes & att_propagate)))
-      {
-+       /* Make sure we have a hash table to store the variable in while it is
-+ 	 being propagated down to the global variables table.  Create one if
-+ 	 we have to */
-+       if ((vc_isfuncenv (shell_variables) || vc_istempenv (shell_variables)) && shell_variables->table == 0)
-+ 	shell_variables->table = hash_create (0);
-        /* XXX - should we set v->context here? */
-        v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0);
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 3
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 4
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-005.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-005
-
-Bug-Reported-by:	[email protected]
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html
-
-Bug-Description:
-
-When the `read' builtin times out after the timeout specified with -t is
-exceeded, it does not reset the flags that tell signal handlers to process
-signals immediately instead of deferring their handling.  This can result
-in unsafe functions being called from signal handlers, which can cause bash
-to hang or dump core.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/builtins/read.def	2009-10-08 11:35:46.000000000 -0400
---- builtins/read.def	2010-03-17 17:35:39.000000000 -0400
-***************
-*** 616,621 ****
-      zsyncfd (fd);
-  
--   interrupt_immediately--;
--   terminate_immediately--;
-    discard_unwind_frame ("read_builtin");
-  
---- 616,619 ----
-***************
-*** 624,627 ****
---- 622,628 ----
-  assign_vars:
-  
-+   interrupt_immediately--;
-+   terminate_immediately--;
-+ 
-  #if defined (ARRAY_VARS)
-    /* If -a was given, take the string read, break it into a list of words,
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 4
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 5
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-006.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-006
-
-Bug-Reported-by:	Mike Frysinger <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00063.html
-
-Bug-Description:
-
-Bash did not correctly print/reproduce here documents attached to commands
-inside compound commands such as for and while.  This affected the
-execution of such commands inside a shell function when the function
-definition is saved and later restored using `.' or `eval'.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/print_cmd.c	2009-09-16 15:32:26.000000000 -0400
---- print_cmd.c	2010-03-22 21:15:30.000000000 -0400
-***************
-*** 114,117 ****
---- 114,123 ----
-  #define CHECK_XTRACE_FP	xtrace_fp = (xtrace_fp ? xtrace_fp : stderr)
-  
-+ #define PRINT_DEFERRED_HEREDOCS(x) \
-+   do { \
-+     if (deferred_heredocs) \
-+       print_deferred_heredocs (x); \
-+   } while (0)
-+ 
-  /* Non-zero means the stuff being printed is inside of a function def. */
-  static int inside_function_def;
-***************
-*** 561,571 ****
-  {
-    print_for_command_head (for_command);
-- 
-    cprintf (";");
-    newline ("do\n");
-    indentation += indentation_amount;
-    make_command_string_internal (for_command->action);
-    semicolon ();
-    indentation -= indentation_amount;
-    newline ("done");
-  }
---- 566,578 ----
-  {
-    print_for_command_head (for_command);
-    cprintf (";");
-    newline ("do\n");
-+ 
-    indentation += indentation_amount;
-    make_command_string_internal (for_command->action);
-+   PRINT_DEFERRED_HEREDOCS ("");
-    semicolon ();
-    indentation -= indentation_amount;
-+ 
-    newline ("done");
-  }
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 5
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 6
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-007.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-007
-
-Bug-Reported-by:	Rob Robason <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00089.html
-
-Bug-Description:
-
-A typo caused bash to not honor a precision specification in a printf
-format.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/builtins/printf.def	2010-01-18 10:50:22.000000000 -0500
---- builtins/printf.def	2010-03-25 09:40:56.000000000 -0400
-***************
-*** 118,122 ****
-        nw = vflag ? vbprintf (f, fieldwidth, func) : printf (f, fieldwidth, func); \
-      else if (have_precision) \
-!       nw = vflag ? vbprintf (f, precision, func) : printf (f, fieldwidth, func); \
-      else \
-        nw = vflag ? vbprintf (f, func) : printf (f, func); \
---- 118,122 ----
-        nw = vflag ? vbprintf (f, fieldwidth, func) : printf (f, fieldwidth, func); \
-      else if (have_precision) \
-!       nw = vflag ? vbprintf (f, precision, func) : printf (f, precision, func); \
-      else \
-        nw = vflag ? vbprintf (f, func) : printf (f, func); \
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 6
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 7
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-008.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-008
-
-Bug-Reported-by:	Dennis van Dok <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-04/msg00038.html
-
-Bug-Description:
-
-When declaring an associative array and implicitly assigning a value
-to element "0", bash does not correctly allocate memory, leading to
-a segmentation violation when that element or the array itself is
-unset.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/builtins/declare.def	2009-11-25 19:42:00.000000000 -0500
---- builtins/declare.def	2010-05-30 18:25:21.000000000 -0400
-***************
-*** 513,517 ****
-  	      /* let bind_{array,assoc}_variable take care of this. */
-  	      if (assoc_p (var))
-! 		bind_assoc_variable (var, name, "0", value, aflags);
-  	      else
-  		bind_array_variable (name, 0, value, aflags);
---- 519,523 ----
-  	      /* let bind_{array,assoc}_variable take care of this. */
-  	      if (assoc_p (var))
-! 		bind_assoc_variable (var, name, savestring ("0"), value, aflags);
-  	      else
-  		bind_array_variable (name, 0, value, aflags);
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 7
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 8
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-009.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-009
-
-Bug-Reported-by:	Tomas Trnka <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00090.html
-
-Bug-Description:
-
-An arriving SIGCHLD will interrupt `slow' system calls such as write(2) to
-or read(2) from a terminal.  This results in an error message and truncated
-input or output.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/sig.c	Fri Aug 14 16:31:52 2009
---- sig.c	Fri Mar 26 22:34:11 2010
-***************
-*** 655,660 ****
---- 655,663 ----
-      act.sa_flags |= SA_INTERRUPT;	/* XXX */
-    else
-      act.sa_flags |= SA_RESTART;		/* XXX */
-+ #else
-+   if (sig == SIGCHLD)
-+     act.sa_flags |= SA_RESTART;
-  #endif
-    sigemptyset (&act.sa_mask);
-    sigemptyset (&oact.sa_mask);
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 8
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 9
-  
-  #endif /* _PATCHLEVEL_H_ */
-
--- a/components/bash/patches/bash41-010.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-010
-
-Bug-Reported-by:	Stephane Jourdois <[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2010-05/msg00165.html
-
-Bug-Description:
-
-The expansion of the \W prompt string escape sequence incorrectly used
-strcpy to copy overlapping strings.  Only memmove works in this case.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/parse.y	2009-12-30 12:51:42.000000000 -0500
---- parse.y	2011-02-24 16:40:48.000000000 -0500
-***************
-*** 5153,5157 ****
-  			t = strrchr (t_string, '/');
-  			if (t)
-! 			  strcpy (t_string, t + 1);
-  		      }
-  		  }
---- 5153,5157 ----
-  			t = strrchr (t_string, '/');
-  			if (t)
-! 			  memmove (t_string, t + 1, strlen (t));
-  		      }
-  		  }
-*** ../bash-4.1-patched/y.tab.c	2009-12-30 12:52:02.000000000 -0500
---- y.tab.c	2011-02-24 16:50:27.000000000 -0500
-***************
-*** 7482,7486 ****
-  			t = strrchr (t_string, '/');
-  			if (t)
-! 			  strcpy (t_string, t + 1);
-  		      }
-  		  }
---- 7482,7486 ----
-  			t = strrchr (t_string, '/');
-  			if (t)
-! 			  memmove (t_string, t + 1, strlen (t));
-  		      }
-  		  }
-***************
-*** 8244,8246 ****
-  }
-  #endif /* HANDLE_MULTIBYTE */
-- 
---- 8244,8245 ----
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 9
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 10
-  
-  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/bash41-011.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-			     BASH PATCH REPORT
-			     =================
-
-Bash-Release:	4.1
-Patch-ID:	bash41-011
-
-Bug-Reported-by:	<[email protected]>
-Bug-Reference-ID:	<[email protected]>
-Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-04/msg00075.html
-
-Bug-Description:
-
-Under certain circumstances, running `fc -l' two times in succession with a
-relative history offset at the end of the history will result in an incorrect
-calculation of the last history entry and a seg fault.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.1-patched/builtins/fc.def	2009-03-21 14:03:43.000000000 -0400
---- builtins/fc.def	2011-04-19 15:46:17.000000000 -0400
-***************
-*** 304,307 ****
---- 304,317 ----
-    last_hist = i - rh - hist_last_line_added;
-  
-+   /* XXX */
-+   if (i == last_hist && hlist[last_hist] == 0)
-+     while (last_hist >= 0 && hlist[last_hist] == 0)
-+       last_hist--;
-+   if (last_hist < 0)
-+     {
-+       sh_erange ((char *)NULL, _("history specification"));
-+       return (EXECUTION_FAILURE);
-+     }
-+ 
-    if (list)
-      {
-***************
-*** 466,470 ****
-  {
-    int sign, n, clen, rh;
-!   register int i, j;
-    register char *s;
-  
---- 476,480 ----
-  {
-    int sign, n, clen, rh;
-!   register int i, j, last_hist;
-    register char *s;
-  
-***************
-*** 486,490 ****
-       calculation as if it were on. */
-    rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
-!   i -= rh + hist_last_line_added;
-  
-    /* No specification defaults to most recent command. */
---- 496,508 ----
-       calculation as if it were on. */
-    rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
-!   last_hist = i - rh - hist_last_line_added;
-! 
-!   if (i == last_hist && hlist[last_hist] == 0)
-!     while (last_hist >= 0 && hlist[last_hist] == 0)
-!       last_hist--;
-!   if (last_hist < 0)
-!     return (-1);
-! 
-!   i = last_hist;
-  
-    /* No specification defaults to most recent command. */
-*** ../bash-4.1-patched/patchlevel.h	2009-10-01 16:39:22.000000000 -0400
---- patchlevel.h	2010-01-14 09:38:08.000000000 -0500
-***************
-*** 26,30 ****
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 10
-  
-  #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
-     looks for to find the patch level (for the sccs version string). */
-  
-! #define PATCHLEVEL 11
-  
-  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-001.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,78 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-001
+
+Bug-Reported-by:	Juergen Daubert <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+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_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-002.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,60 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-002
+
+Bug-Reported-by:	Clark J. Wang <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html
+
+Bug-Description:
+
+The readline vi-mode `cc', `dd', and `yy' commands failed to modify the
+entire line.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/readline/vi_mode.c	2010-11-20 19:51:39.000000000 -0500
+--- lib/readline/vi_mode.c	2011-02-17 20:24:25.000000000 -0500
+***************
+*** 1115,1119 ****
+        _rl_vi_last_motion = c;
+        RL_UNSETSTATE (RL_STATE_VIMOTION);
+!       return (0);
+      }
+  #if defined (READLINE_CALLBACKS)
+--- 1115,1119 ----
+        _rl_vi_last_motion = c;
+        RL_UNSETSTATE (RL_STATE_VIMOTION);
+!       return (vidomove_dispatch (m));
+      }
+  #if defined (READLINE_CALLBACKS)
+*** ../bash-4.2-patched/lib/readline/callback.c	2010-06-06 12:18:58.000000000 -0400
+--- lib/readline/callback.c	2011-02-17 20:43:28.000000000 -0500
+***************
+*** 149,152 ****
+--- 149,155 ----
+  	  /* Should handle everything, including cleanup, numeric arguments,
+  	     and turning off RL_STATE_VIMOTION */
++ 	  if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
++ 	    _rl_internal_char_cleanup ();
++ 
+  	  return;
+  	}
+*** ../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 1
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 2
+  
+  #endif /* _PATCHLEVEL_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-003.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,318 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-003
+
+Bug-Reported-by:	Clark J. Wang <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00136.html
+
+Bug-Description:
+
+When using the pattern replacement and pattern removal word expansions, bash
+miscalculates the possible match length in the presence of an unescaped left
+bracket without a closing right bracket, resulting in a failure to match
+the pattern.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/glob/gmisc.c	2011-02-05 16:11:17.000000000 -0500
+--- lib/glob/gmisc.c	2011-02-18 23:53:42.000000000 -0500
+***************
+*** 78,83 ****
+       size_t wmax;
+  {
+!   wchar_t wc, *wbrack;
+!   int matlen, t, in_cclass, in_collsym, in_equiv;
+  
+    if (*wpat == 0)
+--- 78,83 ----
+       size_t wmax;
+  {
+!   wchar_t wc;
+!   int matlen, bracklen, t, in_cclass, in_collsym, in_equiv;
+  
+    if (*wpat == 0)
+***************
+*** 119,123 ****
+  	case L'[':
+  	  /* scan for ending `]', skipping over embedded [:...:] */
+! 	  wbrack = wpat;
+  	  wc = *wpat++;
+  	  do
+--- 119,123 ----
+  	case L'[':
+  	  /* scan for ending `]', skipping over embedded [:...:] */
+! 	  bracklen = 1;
+  	  wc = *wpat++;
+  	  do
+***************
+*** 125,140 ****
+  	      if (wc == 0)
+  		{
+! 	          matlen += wpat - wbrack - 1;	/* incremented below */
+! 	          break;
+  	        }
+  	      else if (wc == L'\\')
+  		{
+! 		  wc = *wpat++;
+! 		  if (*wpat == 0)
+! 		    break;
+  		}
+  	      else if (wc == L'[' && *wpat == L':')	/* character class */
+  		{
+  		  wpat++;
+  		  in_cclass = 1;
+  		}
+--- 125,148 ----
+  	      if (wc == 0)
+  		{
+! 		  wpat--;			/* back up to NUL */
+! 	          matlen += bracklen;
+! 	          goto bad_bracket;
+  	        }
+  	      else if (wc == L'\\')
+  		{
+! 		  /* *wpat == backslash-escaped character */
+! 		  bracklen++;
+! 		  /* If the backslash or backslash-escape ends the string,
+! 		     bail.  The ++wpat skips over the backslash escape */
+! 		  if (*wpat == 0 || *++wpat == 0)
+! 		    {
+! 		      matlen += bracklen;
+! 		      goto bad_bracket;
+! 		    }
+  		}
+  	      else if (wc == L'[' && *wpat == L':')	/* character class */
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  in_cclass = 1;
+  		}
+***************
+*** 142,145 ****
+--- 150,154 ----
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  in_cclass = 0;
+  		}
+***************
+*** 147,152 ****
+  		{
+  		  wpat++;
+  		  if (*wpat == L']')	/* right bracket can appear as collating symbol */
+! 		    wpat++;
+  		  in_collsym = 1;
+  		}
+--- 156,165 ----
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  if (*wpat == L']')	/* right bracket can appear as collating symbol */
+! 		    {
+! 		      wpat++;
+! 		      bracklen++;
+! 		    }
+  		  in_collsym = 1;
+  		}
+***************
+*** 154,157 ****
+--- 167,171 ----
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  in_collsym = 0;
+  		}
+***************
+*** 159,164 ****
+  		{
+  		  wpat++;
+  		  if (*wpat == L']')	/* right bracket can appear as equivalence class */
+! 		    wpat++;
+  		  in_equiv = 1;
+  		}
+--- 173,182 ----
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  if (*wpat == L']')	/* right bracket can appear as equivalence class */
+! 		    {
+! 		      wpat++;
+! 		      bracklen++;
+! 		    }
+  		  in_equiv = 1;
+  		}
+***************
+*** 166,174 ****
+--- 184,196 ----
+  		{
+  		  wpat++;
++ 		  bracklen++;
+  		  in_equiv = 0;
+  		}
++ 	      else
++ 		bracklen++;
+  	    }
+  	  while ((wc = *wpat++) != L']');
+  	  matlen++;		/* bracket expression can only match one char */
++ bad_bracket:
+  	  break;
+  	}
+***************
+*** 214,219 ****
+       size_t max;
+  {
+!   char c, *brack;
+!   int matlen, t, in_cclass, in_collsym, in_equiv;
+  
+    if (*pat == 0)
+--- 236,241 ----
+       size_t max;
+  {
+!   char c;
+!   int matlen, bracklen, t, in_cclass, in_collsym, in_equiv;
+  
+    if (*pat == 0)
+***************
+*** 255,259 ****
+  	case '[':
+  	  /* scan for ending `]', skipping over embedded [:...:] */
+! 	  brack = pat;
+  	  c = *pat++;
+  	  do
+--- 277,281 ----
+  	case '[':
+  	  /* scan for ending `]', skipping over embedded [:...:] */
+! 	  bracklen = 1;
+  	  c = *pat++;
+  	  do
+***************
+*** 261,276 ****
+  	      if (c == 0)
+  		{
+! 	          matlen += pat - brack - 1;	/* incremented below */
+! 	          break;
+  	        }
+  	      else if (c == '\\')
+  		{
+! 		  c = *pat++;
+! 		  if (*pat == 0)
+! 		    break;
+  		}
+  	      else if (c == '[' && *pat == ':')	/* character class */
+  		{
+  		  pat++;
+  		  in_cclass = 1;
+  		}
+--- 283,306 ----
+  	      if (c == 0)
+  		{
+! 		  pat--;			/* back up to NUL */
+! 		  matlen += bracklen;
+! 		  goto bad_bracket;
+  	        }
+  	      else if (c == '\\')
+  		{
+! 		  /* *pat == backslash-escaped character */
+! 		  bracklen++;
+! 		  /* If the backslash or backslash-escape ends the string,
+! 		     bail.  The ++pat skips over the backslash escape */
+! 		  if (*pat == 0 || *++pat == 0)
+! 		    {
+! 		      matlen += bracklen;
+! 		      goto bad_bracket;
+! 		    }
+  		}
+  	      else if (c == '[' && *pat == ':')	/* character class */
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  in_cclass = 1;
+  		}
+***************
+*** 278,281 ****
+--- 308,312 ----
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  in_cclass = 0;
+  		}
+***************
+*** 283,288 ****
+  		{
+  		  pat++;
+  		  if (*pat == ']')	/* right bracket can appear as collating symbol */
+! 		    pat++;
+  		  in_collsym = 1;
+  		}
+--- 314,323 ----
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  if (*pat == ']')	/* right bracket can appear as collating symbol */
+! 		    {
+! 		      pat++;
+! 		      bracklen++;
+! 		    }
+  		  in_collsym = 1;
+  		}
+***************
+*** 290,293 ****
+--- 325,329 ----
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  in_collsym = 0;
+  		}
+***************
+*** 295,300 ****
+  		{
+  		  pat++;
+  		  if (*pat == ']')	/* right bracket can appear as equivalence class */
+! 		    pat++;
+  		  in_equiv = 1;
+  		}
+--- 331,340 ----
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  if (*pat == ']')	/* right bracket can appear as equivalence class */
+! 		    {
+! 		      pat++;
+! 		      bracklen++;
+! 		    }
+  		  in_equiv = 1;
+  		}
+***************
+*** 302,310 ****
+--- 342,354 ----
+  		{
+  		  pat++;
++ 		  bracklen++;
+  		  in_equiv = 0;
+  		}
++ 	      else
++ 		bracklen++;
+  	    }
+  	  while ((c = *pat++) != ']');
+  	  matlen++;		/* bracket expression can only match one char */
++ bad_bracket:
+  	  break;
+  	}
+*** ../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 2
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 3
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-004.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,53 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-004
+
+Bug-Reported-by:	Mike Frysinger <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00222.html
+
+Bug-Description:
+
+When used in contexts where word splitting and quote removal were not
+performed, such as pattern removal or pattern substitution, empty strings
+(either literal or resulting from quoted variables that were unset or
+null) were not matched correctly, resulting in failure.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2011-01-02 16:12:51.000000000 -0500
+--- subst.c	2011-02-18 22:30:13.000000000 -0500
+***************
+*** 3373,3379 ****
+    if (string == 0 || *string == '\0')
+      return (WORD_LIST *)NULL;
+  
+!   td.flags = 0;
+    td.word = string;
+    tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at);
+    return (tresult);
+--- 3373,3379 ----
+    if (string == 0 || *string == '\0')
+      return (WORD_LIST *)NULL;
+  
+!   td.flags = W_NOSPLIT2;		/* no splitting, remove "" and '' */
+    td.word = string;
+    tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at);
+    return (tresult);
+*** ../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 3
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 4
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-005.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,131 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-005
+
+Bug-Reported-by:	Dennis Williamson <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00147.html
+
+Bug-Description:
+
+Systems that use tzset() to set the local timezone require the TZ variable
+to be in the environment.  Bash must make sure the environment has been
+modified with any updated value for TZ before calling tzset().  This
+affects prompt string expansions and the `%T' printf conversion specification
+on systems that do not allow bash to supply a replacement for getenv(3).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/variables.h	2010-12-02 20:22:01.000000000 -0500
+--- variables.h	2011-02-19 19:57:12.000000000 -0500
+***************
+*** 314,317 ****
+--- 314,318 ----
+  extern void sort_variables __P((SHELL_VAR **));
+  
++ extern int chkexport __P((char *));
+  extern void maybe_make_export_env __P((void));
+  extern void update_export_env_inplace __P((char *, int, char *));
+*** ../bash-4.2-patched/variables.c	2011-01-24 20:07:48.000000000 -0500
+--- variables.c	2011-02-19 20:04:50.000000000 -0500
+***************
+*** 3654,3657 ****
+--- 3654,3673 ----
+  }
+  
++ int
++ chkexport (name)
++      char *name;
++ {
++   SHELL_VAR *v;
++ 
++   v = find_variable (name);
++   if (exported_p (v))
++     {
++       array_needs_making = 1;
++       maybe_make_export_env ();
++       return 1;
++     }
++   return 0;
++ }
++ 
+  void
+  maybe_make_export_env ()
+***************
+*** 4215,4219 ****
+    { "TEXTDOMAINDIR", sv_locale },
+  
+! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
+    { "TZ", sv_tz },
+  #endif
+--- 4231,4235 ----
+    { "TEXTDOMAINDIR", sv_locale },
+  
+! #if defined (HAVE_TZSET)
+    { "TZ", sv_tz },
+  #endif
+***************
+*** 4559,4568 ****
+  #endif /* HISTORY */
+  
+! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
+  void
+  sv_tz (name)
+       char *name;
+  {
+!   tzset ();
+  }
+  #endif
+--- 4575,4585 ----
+  #endif /* HISTORY */
+  
+! #if defined (HAVE_TZSET)
+  void
+  sv_tz (name)
+       char *name;
+  {
+!   if (chkexport (name))
+!     tzset ();
+  }
+  #endif
+*** ../bash-4.2-patched/parse.y	2011-01-02 15:48:11.000000000 -0500
+--- parse.y	2011-02-19 20:05:00.000000000 -0500
+***************
+*** 5136,5139 ****
+--- 5136,5142 ----
+  	      /* Make the current time/date into a string. */
+  	      (void) time (&the_time);
++ #if defined (HAVE_TZSET)
++ 	      sv_tz ("TZ");		/* XXX -- just make sure */
++ #endif
+  	      tm = localtime (&the_time);
+  
+*** ../bash-4.2-patched/builtins/printf.def	2010-11-23 10:02:55.000000000 -0500
+--- builtins/printf.def	2011-02-19 20:05:04.000000000 -0500
+***************
+*** 466,469 ****
+--- 466,472 ----
+  		else
+  		  secs = arg;
++ #if defined (HAVE_TZSET)
++ 		sv_tz ("TZ");		/* XXX -- just make sure */
++ #endif
+  		tm = localtime (&secs);
+  		n = strftime (timebuf, sizeof (timebuf), timefmt, tm);
+*** ../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 4
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 5
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-006.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-006
+
+Bug-Reported-by:	Allan McRae <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00001.html
+
+Bug-Description:
+
+A problem with bash42-005 caused it to dump core if TZ was unset.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/variables.c	2011-02-25 12:07:41.000000000 -0500
+--- variables.c	2011-03-01 10:13:04.000000000 -0500
+***************
+*** 3661,3665 ****
+  
+    v = find_variable (name);
+!   if (exported_p (v))
+      {
+        array_needs_making = 1;
+--- 3661,3665 ----
+  
+    v = find_variable (name);
+!   if (v && exported_p (v))
+      {
+        array_needs_making = 1;
+*** ../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 5
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 6
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-007.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-007
+
+Bug-Reported-by:	Matthias Klose <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00015.html
+
+Bug-Description:
+
+When used in contexts where word splitting and quote removal were not
+performed, such as case statement word expansion, empty strings
+(either literal or resulting from quoted variables that were unset or
+null) were not expanded correctly, resulting in failure.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2011-02-25 12:03:58.000000000 -0500
+--- subst.c	2011-03-03 14:08:23.000000000 -0500
+***************
+*** 4609,4614 ****
+--- 4611,4617 ----
+    if (ifs_firstc == 0)
+  #endif
+      word->flags |= W_NOSPLIT;
++   word->flags |= W_NOSPLIT2;
+    result = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL);
+    expand_no_split_dollar_star = 0;
+  
+*** ../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 6
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 7
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-008.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,74 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-008
+
+Bug-Reported-by:	Doug McMahon <[email protected]>
+Bug-Reference-ID:	<1299441211.2535.11.camel@doug-XPS-M1330>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00050.html
+
+Bug-Description:
+
+Bash-4.2 does not attempt to save the shell history on receipt of a
+terminating signal that is handled synchronously.  Unfortunately, the
+`close' button on most X11 terminal emulators sends SIGHUP, which
+kills the shell.
+
+This is a very small patch to save the history in the case that an
+interactive shell receives a SIGHUP or SIGTERM while in readline and
+reading a command.
+
+The next version of bash will do this differently.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/sig.c	Tue Nov 23 08:21:22 2010
+--- sig.c	Tue Mar  8 21:28:32 2011
+***************
+*** 47,50 ****
+--- 47,51 ----
+  #if defined (READLINE)
+  #  include "bashline.h"
++ #  include <readline/readline.h>
+  #endif
+  
+***************
+*** 63,66 ****
+--- 64,68 ----
+  extern int history_lines_this_session;
+  #endif
++ extern int no_line_editing;
+  
+  extern void initialize_siglist ();
+***************
+*** 506,510 ****
+  #if defined (HISTORY)
+        /* XXX - will inhibit history file being written */
+!       history_lines_this_session = 0;
+  #endif
+        terminate_immediately = 0;
+--- 508,515 ----
+  #if defined (HISTORY)
+        /* XXX - will inhibit history file being written */
+! #  if defined (READLINE)
+!       if (interactive_shell == 0 || interactive == 0 || (sig != SIGHUP && sig != SIGTERM) || no_line_editing || (RL_ISSTATE (RL_STATE_READCMD) == 0))
+! #  endif
+!         history_lines_this_session = 0;
+  #endif
+        terminate_immediately = 0;
+*** ../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 7
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 8
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-009.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,82 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-009
+
+Bug-Reported-by:	<[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-04/msg00075.html
+
+Bug-Description:
+
+Under certain circumstances, running `fc -l' two times in succession with a
+relative history offset at the end of the history will result in an incorrect
+calculation of the last history entry and a seg fault.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/fc.def	2010-05-30 18:25:38.000000000 -0400
+--- builtins/fc.def	2011-04-19 15:46:17.000000000 -0400
+***************
+*** 305,309 ****
+  
+    /* XXX */
+!   if (saved_command_line_count > 0 && i == last_hist && hlist[last_hist] == 0)
+      while (last_hist >= 0 && hlist[last_hist] == 0)
+        last_hist--;
+--- 305,309 ----
+  
+    /* XXX */
+!   if (i == last_hist && hlist[last_hist] == 0)
+      while (last_hist >= 0 && hlist[last_hist] == 0)
+        last_hist--;
+***************
+*** 476,480 ****
+  {
+    int sign, n, clen, rh;
+!   register int i, j;
+    register char *s;
+  
+--- 476,480 ----
+  {
+    int sign, n, clen, rh;
+!   register int i, j, last_hist;
+    register char *s;
+  
+***************
+*** 496,500 ****
+       calculation as if it were on. */
+    rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
+!   i -= rh + hist_last_line_added;
+  
+    /* No specification defaults to most recent command. */
+--- 496,508 ----
+       calculation as if it were on. */
+    rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
+!   last_hist = i - rh - hist_last_line_added;
+! 
+!   if (i == last_hist && hlist[last_hist] == 0)
+!     while (last_hist >= 0 && hlist[last_hist] == 0)
+!       last_hist--;
+!   if (last_hist < 0)
+!     return (-1);
+! 
+!   i = last_hist;
+  
+    /* No specification defaults to most recent command. */
+*** ../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 8
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 9
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-010.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,61 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-010
+
+Bug-Reported-by:	Mike Frysinger <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-04/msg00058.html
+
+Bug-Description:
+
+Bash did not correctly print/reproduce here documents attached to commands
+inside compound commands such as arithmetic for loops and user-specified
+subshells.  This affected the execution of such commands inside a shell
+function when the function definition is saved and later restored using
+`.' or `eval'.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/print_cmd.c	2010-05-30 18:34:08.000000000 -0400
+--- print_cmd.c	2011-04-14 10:43:18.000000000 -0400
+***************
+*** 316,319 ****
+--- 317,321 ----
+  	  skip_this_indent++;
+  	  make_command_string_internal (command->value.Subshell->command);
++ 	  PRINT_DEFERRED_HEREDOCS ("");
+  	  cprintf (" )");
+  	  break;
+***************
+*** 593,596 ****
+--- 606,610 ----
+    indentation += indentation_amount;
+    make_command_string_internal (arith_for_command->action);
++   PRINT_DEFERRED_HEREDOCS ("");
+    semicolon ();
+    indentation -= indentation_amount;
+***************
+*** 654,657 ****
+--- 668,672 ----
+  
+    make_command_string_internal (group_command->command);
++   PRINT_DEFERRED_HEREDOCS ("");
+  
+    if (inside_function_def)
+*** ../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 9
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 10
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-011.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-011
+
+Bug-Reported-by:	"David Parks" <[email protected]>
+Bug-Reference-ID:	<014101cc82c6$46ac1540$d4043fc0$@com>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-10/msg00031.html
+
+Bug-Description:
+
+Overwriting a value in an associative array causes the memory allocated to
+store the key on the second and subsequent assignments to leak.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/assoc.c	2009-08-05 20:19:40.000000000 -0400
+--- assoc.c	2011-10-04 20:23:07.000000000 -0400
+***************
+*** 78,81 ****
+--- 78,86 ----
+    if (b == 0)
+      return -1;
++   /* If we are overwriting an existing element's value, we're not going to
++      use the key.  Nothing in the array assignment code path frees the key
++      string, so we can free it here to avoid a memory leak. */
++   if (b->key != key)
++     free (key);
+    FREE (b->data);
+    b->data = value ? savestring (value) : (char *)0;
+*** ../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 10
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 11
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-012.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,151 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-012
+
+Bug-Reported-by:	Rui Santos <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-06/msg00079.html
+
+Bug-Description:
+
+When calling the parser to recursively parse a command substitution within
+an arithmetic expansion, the shell overwrote the saved shell input line and
+associated state, resulting in a garbled command.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/parse.y	2011-02-26 19:19:05.000000000 -0500
+--- parse.y	2011-06-24 20:08:22.000000000 -0400
+***************
+*** 3843,3846 ****
+--- 3849,3853 ----
+  {
+    sh_parser_state_t ps;
++   sh_input_line_state_t ls;
+    int orig_ind, nc, sflags;
+    char *ret, *s, *ep, *ostring;
+***************
+*** 3850,3857 ****
+--- 3857,3866 ----
+    ostring = string;
+  
++ /*itrace("xparse_dolparen: size = %d shell_input_line = `%s'", shell_input_line_size, shell_input_line);*/
+    sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
+    if (flags & SX_NOLONGJMP)
+      sflags |= SEVAL_NOLONGJMP;
+    save_parser_state (&ps);
++   save_input_line_state (&ls);
+  
+    /*(*/
+***************
+*** 3862,3865 ****
+--- 3871,3876 ----
+    restore_parser_state (&ps);
+    reset_parser ();
++   /* reset_parser clears shell_input_line and associated variables */
++   restore_input_line_state (&ls);
+    if (interactive)
+      token_to_read = 0;
+***************
+*** 5909,5912 ****
+--- 5920,5929 ----
+    ps->echo_input_at_read = echo_input_at_read;
+  
++   ps->token = token;
++   ps->token_buffer_size = token_buffer_size;
++   /* Force reallocation on next call to read_token_word */
++   token = 0;
++   token_buffer_size = 0;
++ 
+    return (ps);
+  }
+***************
+*** 5950,5953 ****
+--- 5967,6006 ----
+    expand_aliases = ps->expand_aliases;
+    echo_input_at_read = ps->echo_input_at_read;
++ 
++   FREE (token);
++   token = ps->token;
++   token_buffer_size = ps->token_buffer_size;
++ }
++ 
++ sh_input_line_state_t *
++ save_input_line_state (ls)
++      sh_input_line_state_t *ls;
++ {
++   if (ls == 0)
++     ls = (sh_input_line_state_t *)xmalloc (sizeof (sh_input_line_state_t));
++   if (ls == 0)
++     return ((sh_input_line_state_t *)NULL);
++ 
++   ls->input_line = shell_input_line;
++   ls->input_line_size = shell_input_line_size;
++   ls->input_line_len = shell_input_line_len;
++   ls->input_line_index = shell_input_line_index;
++ 
++   /* force reallocation */
++   shell_input_line = 0;
++   shell_input_line_size = shell_input_line_len = shell_input_line_index = 0;
++ }
++ 
++ void
++ restore_input_line_state (ls)
++      sh_input_line_state_t *ls;
++ {
++   FREE (shell_input_line);
++   shell_input_line = ls->input_line;
++   shell_input_line_size = ls->input_line_size;
++   shell_input_line_len = ls->input_line_len;
++   shell_input_line_index = ls->input_line_index;
++ 
++   set_line_mbstate ();
+  }
+  
+*** ../bash-4.2-patched/shell.h	2011-01-06 22:16:55.000000000 -0500
+--- shell.h	2011-06-24 19:12:25.000000000 -0400
+***************
+*** 137,140 ****
+--- 139,145 ----
+    int *token_state;
+  
++   char *token;
++   int token_buffer_size;
++ 
+    /* input line state -- line number saved elsewhere */
+    int input_line_terminator;
+***************
+*** 167,171 ****
+--- 172,186 ----
+  } sh_parser_state_t;
+  
++ typedef struct _sh_input_line_state_t {
++   char *input_line;
++   int input_line_index;
++   int input_line_size;
++   int input_line_len;
++ } sh_input_line_state_t;
++ 
+  /* Let's try declaring these here. */
+  extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
+  extern void restore_parser_state __P((sh_parser_state_t *));
++ 
++ extern sh_input_line_state_t *save_input_line_state __P((sh_input_line_state_t *));
++ extern void restore_input_line_state __P((sh_input_line_state_t *));
+*** ../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 11
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 12
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-013.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,52 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-013
+
+Bug-Reported-by:	Marten Wikstrom <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-05/msg00049.html
+
+Bug-Description:
+
+An off-by-one error caused the shell to skip over CTLNUL characters,
+which are used internally to mark quoted null strings.  The effect
+was to have stray 0x7f characters left after expanding words like
+""""""""aa.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2011-03-06 14:11:11.000000000 -0500
+--- subst.c	2011-05-11 11:23:33.000000000 -0400
+***************
+*** 3707,3711 ****
+  	}
+        else if (string[i] == CTLNUL)
+! 	i++;
+  
+        prev_i = i;
+--- 3710,3717 ----
+  	}
+        else if (string[i] == CTLNUL)
+! 	{
+! 	  i++;
+! 	  continue;
+! 	}
+  
+        prev_i = i;
+*** ../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 12
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 13
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-014.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,47 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-014
+
+Bug-Reported-by:	Shawn Bohrer <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-05/msg00018.html
+
+Bug-Description:
+
+The regular expression matching operator did not correctly match
+expressions with an embedded ^A.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/pathexp.c	2010-08-13 23:21:57.000000000 -0400
+--- pathexp.c	2011-05-05 16:40:58.000000000 -0400
+***************
+*** 197,201 ****
+  	  if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
+  	    continue;
+! 	  if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+  	    continue;
+  	  temp[j++] = '\\';
+--- 197,201 ----
+  	  if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
+  	    continue;
+! 	  if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+  	    continue;
+  	  temp[j++] = '\\';
+*** ../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 13
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 14
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-015.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,81 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-015
+
+Bug-Reported-by:	<[email protected]>
+Bug-Reference-ID:	<728_1312188080_4E3666B0_728_118711_1_3B5D3E0F95CC5C478D6500CDCE8B691F7AAAA4AA3D@PUEXCB2B.nanterre.francetelecom.fr>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-08/msg00000.html
+
+Bug-Description:
+
+When in a context where arithmetic evaluation is not taking place, the
+evaluator should not check for division by 0.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/expr.c	2010-12-21 11:12:13.000000000 -0500
+--- expr.c	2011-08-02 20:58:28.000000000 -0400
+***************
+*** 477,480 ****
+--- 481,492 ----
+        if (special)
+  	{
++ 	  if ((op == DIV || op == MOD) && value == 0)
++ 	    {
++ 	      if (noeval == 0)
++ 		evalerror (_("division by 0"));
++ 	      else
++ 	        value = 1;
++ 	    }
++ 
+  	  switch (op)
+  	    {
+***************
+*** 483,493 ****
+  	      break;
+  	    case DIV:
+- 	      if (value == 0)
+- 		evalerror (_("division by 0"));
+  	      lvalue /= value;
+  	      break;
+  	    case MOD:
+- 	      if (value == 0)
+- 		evalerror (_("division by 0"));
+  	      lvalue %= value;
+  	      break;
+--- 495,501 ----
+***************
+*** 805,809 ****
+  
+        if (((op == DIV) || (op == MOD)) && (val2 == 0))
+! 	evalerror (_("division by 0"));
+  
+        if (op == MUL)
+--- 813,822 ----
+  
+        if (((op == DIV) || (op == MOD)) && (val2 == 0))
+! 	{
+! 	  if (noeval == 0)
+! 	    evalerror (_("division by 0"));
+! 	  else
+! 	    val2 = 1;
+! 	}
+  
+        if (op == MUL)
+*** ../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 14
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 15
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-016.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-016
+
+Bug-Reported-by:	Martin von Gagern <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-08/msg00141.html
+
+Bug-Description:
+
+Bash should not check for mail while executing the `eval' builtin.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/parse.y	Fri Feb 25 12:07:41 2011
+--- parse.y	Thu Aug 11 19:02:26 2011
+***************
+*** 2500,2504 ****
+  	 is the mail alarm reset; nothing takes place in check_mail ()
+  	 except the checking of mail.  Please don't change this. */
+!       if (prompt_is_ps1 && time_to_check_mail ())
+  	{
+  	  check_mail ();
+--- 2498,2502 ----
+  	 is the mail alarm reset; nothing takes place in check_mail ()
+  	 except the checking of mail.  Please don't change this. */
+!       if (prompt_is_ps1 && parse_and_execute_level == 0 && time_to_check_mail ())
+  	{
+  	  check_mail ();
+*** ../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 15
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 16
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-017.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,47 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-017
+
+Bug-Reported-by:	Curtis Doty <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-06/msg00053.html
+
+Bug-Description:
+
+Using `read -a foo' where foo was an already-declared associative array
+caused the shell to die with a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/read.def	2011-01-04 11:43:36.000000000 -0500
+--- builtins/read.def	2011-06-21 10:31:02.000000000 -0400
+***************
+*** 643,646 ****
+--- 642,651 ----
+  	  return EXECUTION_FAILURE;	/* readonly or noassign */
+  	}
++       if (assoc_p (var))
++ 	{
++           builtin_error (_("%s: cannot convert associative to indexed array"), arrayname);
++ 	  xfree (input_string);
++ 	  return EXECUTION_FAILURE;	/* existing associative array */
++ 	}
+        array_flush (array_cell (var));
+  
+*** ../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 16
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 17
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-018.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,74 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-018
+
+Bug-Reported-by:	Thomas Cort <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-06/msg00110.html
+
+Bug-Description:
+
+Bash fails to compile unless JOB_CONTROL is defined.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/execute_cmd.c	2011-02-09 17:32:25.000000000 -0500
+--- execute_cmd.c	2011-11-06 15:12:48.000000000 -0500
+***************
+*** 2197,2200 ****
+--- 2315,2319 ----
+      cmd->flags |= CMD_IGNORE_RETURN;
+  
++ #if defined (JOB_CONTROL)
+    lastpipe_flag = 0;
+    begin_unwind_frame ("lastpipe-exec");
+***************
+*** 2216,2228 ****
+  	  add_unwind_protect (lastpipe_cleanup, lastpipe_jid);
+  	}
+!       cmd->flags |= CMD_LASTPIPE;
+      }	  
+    if (prev >= 0)
+      add_unwind_protect (close, prev);
+  
+    exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close);
+  
+    if (lstdin > 0)
+      restore_stdin (lstdin);
+  
+    if (prev >= 0)
+--- 2335,2351 ----
+  	  add_unwind_protect (lastpipe_cleanup, lastpipe_jid);
+  	}
+!       if (cmd)
+! 	cmd->flags |= CMD_LASTPIPE;
+      }	  
+    if (prev >= 0)
+      add_unwind_protect (close, prev);
++ #endif
+  
+    exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close);
+  
++ #if defined (JOB_CONTROL)
+    if (lstdin > 0)
+      restore_stdin (lstdin);
++ #endif
+  
+    if (prev >= 0)
+*** ../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 17
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 18
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-019.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,47 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-019
+
+Bug-Reported-by:	Diego Augusto Molina <[email protected]>
+Bug-Reference-ID:	<CAGOxLdHcSQu3ck9Qy3pRjj_NBU5tAPSAvNm-95-nLQ9Szwb6aA@mail.gmail.com>
+Bug-Reference-URL:	lists.gnu.org/archive/html/bug-bash/2011-09/msg00047.html
+
+Bug-Description:
+
+Using `declare' with attributes and an invalid array variable name or
+assignment reference resulted in a segmentation fault instead of a
+declaration error.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/declare.def	2010-05-30 18:25:21.000000000 -0400
+--- builtins/declare.def	2011-09-15 15:20:20.000000000 -0400
+***************
+*** 514,517 ****
+--- 514,522 ----
+  	      var = assign_array_element (name, value, 0);	/* XXX - not aflags */
+  	      *subscript_start = '\0';
++ 	      if (var == 0)	/* some kind of assignment error */
++ 		{
++ 		  assign_error++;
++ 		  NEXT_VARIABLE ();
++ 		}
+  	    }
+  	  else if (simple_array_assign)
+*** ../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 18
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 19
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-020.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,60 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-020
+
+Bug-Reported-by:	Vincent Sheffer <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	https://lists.gnu.org/archive/html/bug-readline/2011-08/msg00000.html
+
+Bug-Description:
+
+The shared object helper script needs to be updated for Mac OS X 10.7
+(Lion, darwin11).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/support/shobj-conf	2009-10-28 09:20:21.000000000 -0400
+--- support/shobj-conf	2011-08-27 13:25:23.000000000 -0400
+***************
+*** 158,162 ****
+  
+  # Darwin/MacOS X
+! darwin[89]*|darwin10*)
+  	SHOBJ_STATUS=supported
+  	SHLIB_STATUS=supported
+--- 172,176 ----
+  
+  # Darwin/MacOS X
+! darwin[89]*|darwin1[012]*)
+  	SHOBJ_STATUS=supported
+  	SHLIB_STATUS=supported
+***************
+*** 187,191 ****
+  
+  	case "${host_os}" in
+! 	darwin[789]*|darwin10*)	SHOBJ_LDFLAGS=''
+  			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+  			;;
+--- 201,205 ----
+  
+  	case "${host_os}" in
+! 	darwin[789]*|darwin1[012]*)	SHOBJ_LDFLAGS=''
+  			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+  			;;
+*** ../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 19
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 20
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-021.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,61 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-021
+
+Bug-Reported-by:	Dan Douglas <[email protected]>
+Bug-Reference-ID:	<4585554.nZWb4q7YoZ@smorgbox>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-12/msg00084.html
+
+Bug-Description:
+
+Using `read -N' to assign values to an array can result in NUL values being
+assigned to some array elements.  These values cause seg faults when referenced
+later.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/read.def	2011-11-21 18:03:38.000000000 -0500
+--- builtins/read.def	2011-12-19 19:52:12.000000000 -0500
+***************
+*** 738,742 ****
+  	    }
+  	  else
+! 	    var = bind_read_variable (varname, t);
+  	}
+        else
+--- 775,779 ----
+  	    }
+  	  else
+! 	    var = bind_read_variable (varname, t ? t : "");
+  	}
+        else
+***************
+*** 799,803 ****
+      }
+    else
+!     var = bind_read_variable (list->word->word, input_string);
+  
+    if (var)
+--- 836,840 ----
+      }
+    else
+!     var = bind_read_variable (list->word->word, input_string ? input_string : "");
+  
+    if (var)
+*** ../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 20
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 21
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-022.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,61 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-022
+
+Bug-Reported-by:	Gregory Margo <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-07/msg00102.html
+
+Bug-Description:
+
+The return value from lseek is `off_t'.  This can cause corrupted return
+values when the file offset is greater than 2**31 - 1.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/sh/zread.c	Mon Mar  2 08:54:45 2009
+--- lib/sh/zread.c	Thu Jul 28 18:16:53 2011
+***************
+*** 161,166 ****
+       int fd;
+  {
+!   off_t off;
+!   int r;
+  
+    off = lused - lind;
+--- 161,165 ----
+       int fd;
+  {
+!   off_t off, r;
+  
+    off = lused - lind;
+***************
+*** 169,173 ****
+      r = lseek (fd, -off, SEEK_CUR);
+  
+!   if (r >= 0)
+      lused = lind = 0;
+  }
+--- 168,172 ----
+      r = lseek (fd, -off, SEEK_CUR);
+  
+!   if (r != -1)
+      lused = lind = 0;
+  }
+*** ../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 21
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 22
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-023.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,62 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-023
+
+Bug-Reported-by:	Ewan Mellor <[email protected]>
+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_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-024.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,45 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-024
+
+Bug-Reported-by:	Jim Avera <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-02/msg00001.html
+
+Bug-Description:
+
+When `printf -v' is used to set an array element, the format string contains
+`%b', and the corresponding argument is the empty string, the buffer used
+to store the value to be assigned can be NULL, which results in NUL being
+assigned to the array element.  This causes a seg fault when it's used later.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/printf.def	2011-02-25 12:07:41.000000000 -0500
+--- builtins/printf.def	2012-02-02 08:37:12.000000000 -0500
+***************
+*** 256,259 ****
+--- 257,262 ----
+  	    {
+  	      vflag = 1;
++ 	      if (vbsize == 0)
++ 		vbuf = xmalloc (vbsize = 16);
+  	      vblen = 0;
+  	      if (vbuf)
+*** ../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 23
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 24
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-025.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,143 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-025
+
+Bug-Reported-by:	Bill Gradwohl <[email protected]>
+Bug-Reference-ID:	<CAFyvKis-UfuOWr5THBRKh=vYHDoKEEgdW8hN1RviTuYQ00Lu5A@mail.gmail.com>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/help-bash/2012-03/msg00078.html
+
+Bug-Description:
+
+When used in a shell function, `declare -g -a array=(compound assignment)'
+creates a local variable instead of a global one.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/command.h	2010-08-02 19:36:51.000000000 -0400
+--- command.h	2012-04-01 12:38:35.000000000 -0400
+***************
+*** 98,101 ****
+--- 98,102 ----
+  #define W_ASSIGNASSOC	0x400000	/* word looks like associative array assignment */
+  #define W_ARRAYIND	0x800000	/* word is an array index being expanded */
++ #define W_ASSNGLOBAL	0x1000000	/* word is a global assignment to declare (declare/typeset -g) */
+  
+  /* Possible values for subshell_environment */
+*** ../bash-4.2-patched/execute_cmd.c	2011-11-21 18:03:41.000000000 -0500
+--- execute_cmd.c	2012-04-01 12:42:03.000000000 -0400
+***************
+*** 3581,3585 ****
+    WORD_LIST *w;
+    struct builtin *b;
+!   int assoc;
+  
+    if (words == 0)
+--- 3581,3585 ----
+    WORD_LIST *w;
+    struct builtin *b;
+!   int assoc, global;
+  
+    if (words == 0)
+***************
+*** 3587,3591 ****
+  
+    b = 0;
+!   assoc = 0;
+  
+    for (w = words; w; w = w->next)
+--- 3587,3591 ----
+  
+    b = 0;
+!   assoc = global = 0;
+  
+    for (w = words; w; w = w->next)
+***************
+*** 3604,3607 ****
+--- 3604,3609 ----
+  	if (assoc)
+  	  w->word->flags |= W_ASSIGNASSOC;
++ 	if (global)
++ 	  w->word->flags |= W_ASSNGLOBAL;
+  #endif
+        }
+***************
+*** 3609,3613 ****
+      /* Note that we saw an associative array option to a builtin that takes
+         assignment statements.  This is a bit of a kludge. */
+!     else if (w->word->word[0] == '-' && strchr (w->word->word, 'A'))
+        {
+  	if (b == 0)
+--- 3611,3618 ----
+      /* Note that we saw an associative array option to a builtin that takes
+         assignment statements.  This is a bit of a kludge. */
+!     else if (w->word->word[0] == '-' && (strchr (w->word->word+1, 'A') || strchr (w->word->word+1, 'g')))
+! #else
+!     else if (w->word->word[0] == '-' && strchr (w->word->word+1, 'g'))
+! #endif
+        {
+  	if (b == 0)
+***************
+*** 3619,3626 ****
+  	      words->word->flags |= W_ASSNBLTIN;
+  	  }
+! 	if (words->word->flags & W_ASSNBLTIN)
+  	  assoc = 1;
+        }
+- #endif
+  }
+  
+--- 3624,3632 ----
+  	      words->word->flags |= W_ASSNBLTIN;
+  	  }
+! 	if ((words->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'A'))
+  	  assoc = 1;
++ 	if ((words->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'g'))
++ 	  global = 1;
+        }
+  }
+  
+*** ../bash-4.2-patched/subst.c	2012-03-11 17:35:13.000000000 -0400
+--- subst.c	2012-04-01 12:38:35.000000000 -0400
+***************
+*** 367,370 ****
+--- 367,375 ----
+        fprintf (stderr, "W_ASSNBLTIN%s", f ? "|" : "");
+      }
++   if (f & W_ASSNGLOBAL)
++     {
++       f &= ~W_ASSNGLOBAL;
++       fprintf (stderr, "W_ASSNGLOBAL%s", f ? "|" : "");
++     }
+    if (f & W_COMPASSIGN)
+      {
+***************
+*** 2804,2808 ****
+    else if (assign_list)
+      {
+!       if (word->flags & W_ASSIGNARG)
+  	aflags |= ASS_MKLOCAL;
+        if (word->flags & W_ASSIGNASSOC)
+--- 2809,2813 ----
+    else if (assign_list)
+      {
+!       if ((word->flags & W_ASSIGNARG) && (word->flags & W_ASSNGLOBAL) == 0)
+  	aflags |= ASS_MKLOCAL;
+        if (word->flags & W_ASSIGNASSOC)
+
+*** ../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 24
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 25
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-026.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,58 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-026
+
+Bug-Reported-by:	Greg Wooledge <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00172.html
+
+Bug-Description:
+
+The `lastpipe' option does not behave correctly on machines where the
+open file limit is less than 256.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/execute_cmd.c	2011-11-21 12:04:47.000000000 -0500
+--- execute_cmd.c	2012-04-26 11:09:30.000000000 -0400
+***************
+*** 2206,2210 ****
+    if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
+      {
+!       lstdin = move_to_high_fd (0, 0, 255);
+        if (lstdin > 0)
+  	{
+--- 2325,2329 ----
+    if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
+      {
+!       lstdin = move_to_high_fd (0, 1, -1);
+        if (lstdin > 0)
+  	{
+***************
+*** 2252,2256 ****
+--- 2371,2377 ----
+      }
+  
++ #if defined (JOB_CONTROL)
+    discard_unwind_frame ("lastpipe-exec");
++ #endif
+  
+    return (exec_result);
+
+*** ../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 25
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 26
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-027.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,47 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-027
+
+Bug-Reported-by:	Mike Frysinger <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00134.html
+
+Bug-Description:
+
+When the `extglob' shell option is enabled, pattern substitution does not
+work correctly in the presence of multibyte characters.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2012-03-11 17:52:57.000000000 -0400
+--- subst.c	2012-04-22 16:19:10.000000000 -0400
+***************
+*** 4167,4171 ****
+  #if defined (EXTENDED_GLOB)
+    if (extended_glob)
+!     simple |= (wpat[1] != L'(' || (wpat[0] != L'*' && wpat[0] != L'?' && wpat[0] != L'+' && wpat[0] != L'!' && wpat[0] != L'@')); /*)*/
+  #endif
+  
+--- 4167,4171 ----
+  #if defined (EXTENDED_GLOB)
+    if (extended_glob)
+!     simple &= (wpat[1] != L'(' || (wpat[0] != L'*' && wpat[0] != L'?' && wpat[0] != L'+' && wpat[0] != L'!' && wpat[0] != L'@')); /*)*/
+  #endif
+  
+*** ../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 26
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 27
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-028.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,52 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-028
+
+Bug-Reported-by:	Mark Edgar <[email protected]>
+Bug-Reference-ID:	<CABHMh_3d+ZgO_zaEtYXPwK4P7tC0ghZ4g=Ue_TRpsEMf5YDsqw@mail.gmail.com>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-03/msg00109.html
+
+Bug-Description:
+
+When using a word expansion for which the right hand side is evaluated,
+certain expansions of quoted null strings include spurious ^? characters.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2012-03-11 17:35:13.000000000 -0400
+--- subst.c	2012-03-20 19:30:13.000000000 -0400
+***************
+*** 5810,5813 ****
+--- 5810,5823 ----
+        if (qdollaratp && ((hasdol && quoted) || l->next))
+  	*qdollaratp = 1;
++       /* If we have a quoted null result (QUOTED_NULL(temp)) and the word is
++ 	 a quoted null (l->next == 0 && QUOTED_NULL(l->word->word)), the
++ 	 flags indicate it (l->word->flags & W_HASQUOTEDNULL), and the
++ 	 expansion is quoted (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
++ 	 (which is more paranoia than anything else), we need to return the
++ 	 quoted null string and set the flags to indicate it. */
++       if (l->next == 0 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && QUOTED_NULL(temp) && QUOTED_NULL(l->word->word) && (l->word->flags & W_HASQUOTEDNULL))
++ 	{
++ 	  w->flags |= W_HASQUOTEDNULL;
++ 	}
+        dispose_words (l);
+      }
+
+*** ../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 27
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 28
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-029.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,524 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-029
+
+Bug-Reported-by:	"Michael Kalisz" <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
+
+Bug-Description:
+
+Bash-4.2 tries to leave completed directory names as the user typed them,
+without expanding them to a full pathname.  One effect of this is that
+shell variables used in pathnames being completed (e.g., $HOME) are left
+unchanged, but the `$' is quoted by readline because it is a special
+character to the shell.
+
+This patch introduces two things:
+
+1.  A new shell option, `direxpand', which, if set, attempts to emulate the
+    bash-4.1 behavior of expanding words to full pathnames during
+    completion;
+2.  A set of heuristics that reduce the number of times special characters
+    such as `$' are quoted when the directory name is not expanded.
+
+Patch (apply with `patch -p0'):
+
+diff -NrC 2 ../bash-4.2-patched/bashline.c ./bashline.c
+*** ../bash-4.2-patched/bashline.c	2011-01-16 15:32:47.000000000 -0500
+--- ./bashline.c	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 122,125 ****
+--- 122,128 ----
+  static int bash_push_line __P((void));
+  
++ static rl_icppfunc_t *save_directory_hook __P((void));
++ static void reset_directory_hook __P((rl_icppfunc_t *));
++ 
+  static void cleanup_expansion_error __P((void));
+  static void maybe_make_readline_line __P((char *));
+***************
+*** 244,251 ****
+--- 247,261 ----
+  int dircomplete_spelling = 0;
+  
++ /* Expand directory names during word/filename completion. */
++ int dircomplete_expand = 0;
++ int dircomplete_expand_relpath = 0;
++ 
+  static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:";
+  static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:";
+  /* )) */
+  
++ static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~";	/*}*/
++ static char *custom_filename_quote_characters = 0;
++ 
+  static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL;
+  
+***************
+*** 502,506 ****
+    /* Tell the completer that we might want to follow symbolic links or
+       do other expansion on directory names. */
+!   rl_directory_rewrite_hook = bash_directory_completion_hook;
+  
+    rl_filename_rewrite_hook = bash_filename_rewrite_hook;
+--- 512,516 ----
+    /* Tell the completer that we might want to follow symbolic links or
+       do other expansion on directory names. */
+!   set_directory_hook ();
+  
+    rl_filename_rewrite_hook = bash_filename_rewrite_hook;
+***************
+*** 530,534 ****
+  
+    /* characters that need to be quoted when appearing in filenames. */
+!   rl_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~";	/*}*/
+  
+    rl_filename_quoting_function = bash_quote_filename;
+--- 540,544 ----
+  
+    /* characters that need to be quoted when appearing in filenames. */
+!   rl_filename_quote_characters = default_filename_quote_characters;
+  
+    rl_filename_quoting_function = bash_quote_filename;
+***************
+*** 565,570 ****
+    rl_attempted_completion_function = attempt_shell_completion;
+    rl_completion_entry_function = NULL;
+-   rl_directory_rewrite_hook = bash_directory_completion_hook;
+    rl_ignore_some_completions_function = filename_completion_ignore;
+  }
+  
+--- 575,582 ----
+    rl_attempted_completion_function = attempt_shell_completion;
+    rl_completion_entry_function = NULL;
+    rl_ignore_some_completions_function = filename_completion_ignore;
++   rl_filename_quote_characters = default_filename_quote_characters;
++ 
++   set_directory_hook ();
+  }
+  
+***************
+*** 1280,1283 ****
+--- 1292,1298 ----
+    rl_ignore_some_completions_function = filename_completion_ignore;
+  
++   rl_filename_quote_characters = default_filename_quote_characters;
++   set_directory_hook ();
++ 
+    /* Determine if this could be a command word.  It is if it appears at
+       the start of the line (ignoring preceding whitespace), or if it
+***************
+*** 1592,1595 ****
+--- 1607,1616 ----
+  	  else
+  	    {
++ 	     if (dircomplete_expand && dot_or_dotdot (filename_hint))
++ 		{
++ 		  dircomplete_expand = 0;
++ 		  set_directory_hook ();
++ 		  dircomplete_expand = 1;
++ 		}
+  	      mapping_over = 4;
+  	      goto inner;
+***************
+*** 1792,1795 ****
+--- 1813,1819 ----
+   inner:
+    val = rl_filename_completion_function (filename_hint, istate);
++   if (mapping_over == 4 && dircomplete_expand)
++     set_directory_hook ();
++ 
+    istate = 1;
+  
+***************
+*** 2694,2697 ****
+--- 2718,2767 ----
+  }
+  
++ /* Functions to save and restore the appropriate directory hook */
++ /* This is not static so the shopt code can call it */
++ void
++ set_directory_hook ()
++ {
++   if (dircomplete_expand)
++     {
++       rl_directory_completion_hook = bash_directory_completion_hook;
++       rl_directory_rewrite_hook = (rl_icppfunc_t *)0;
++     }
++   else
++     {
++       rl_directory_rewrite_hook = bash_directory_completion_hook;
++       rl_directory_completion_hook = (rl_icppfunc_t *)0;
++     }
++ }
++ 
++ static rl_icppfunc_t *
++ save_directory_hook ()
++ {
++   rl_icppfunc_t *ret;
++ 
++   if (dircomplete_expand)
++     {
++       ret = rl_directory_completion_hook;
++       rl_directory_completion_hook = (rl_icppfunc_t *)NULL;
++     }
++   else
++     {
++       ret = rl_directory_rewrite_hook;
++       rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL;
++     }
++ 
++   return ret;
++ }
++ 
++ static void
++ restore_directory_hook (hookf)
++      rl_icppfunc_t *hookf;
++ {
++   if (dircomplete_expand)
++     rl_directory_completion_hook = hookf;
++   else
++     rl_directory_rewrite_hook = hookf;
++ }
++ 
+  /* Handle symbolic link references and other directory name
+     expansions while hacking completion.  This should return 1 if it modifies
+***************
+*** 2703,2720 ****
+  {
+    char *local_dirname, *new_dirname, *t;
+!   int return_value, should_expand_dirname;
+    WORD_LIST *wl;
+    struct stat sb;
+  
+!   return_value = should_expand_dirname = 0;
+    local_dirname = *dirname;
+  
+!   if (mbschr (local_dirname, '$'))
+!     should_expand_dirname = 1;
+    else
+      {
+        t = mbschr (local_dirname, '`');
+        if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0)
+! 	should_expand_dirname = 1;
+      }
+  
+--- 2773,2801 ----
+  {
+    char *local_dirname, *new_dirname, *t;
+!   int return_value, should_expand_dirname, nextch, closer;
+    WORD_LIST *wl;
+    struct stat sb;
+  
+!   return_value = should_expand_dirname = nextch = closer = 0;
+    local_dirname = *dirname;
+  
+!   if (t = mbschr (local_dirname, '$'))
+!     {
+!       should_expand_dirname = '$';
+!       nextch = t[1];
+!       /* Deliberately does not handle the deprecated $[...] arithmetic
+! 	 expansion syntax */
+!       if (nextch == '(')
+! 	closer = ')';
+!       else if (nextch == '{')
+! 	closer = '}';
+!       else
+! 	nextch = 0;
+!     }
+    else
+      {
+        t = mbschr (local_dirname, '`');
+        if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0)
+! 	should_expand_dirname = '`';
+      }
+  
+***************
+*** 2740,2743 ****
+--- 2821,2841 ----
+  	  dispose_words (wl);
+  	  local_dirname = *dirname;
++ 	  /* XXX - change rl_filename_quote_characters here based on
++ 	     should_expand_dirname/nextch/closer.  This is the only place
++ 	     custom_filename_quote_characters is modified. */
++ 	  if (rl_filename_quote_characters && *rl_filename_quote_characters)
++ 	    {
++ 	      int i, j, c;
++ 	      i = strlen (default_filename_quote_characters);
++ 	      custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1);
++ 	      for (i = j = 0; c = default_filename_quote_characters[i]; i++)
++ 		{
++ 		  if (c == should_expand_dirname || c == nextch || c == closer)
++ 		    continue;
++ 		  custom_filename_quote_characters[j++] = c;
++ 		}
++ 	      custom_filename_quote_characters[j] = '\0';
++ 	      rl_filename_quote_characters = custom_filename_quote_characters;
++ 	    }
+  	}
+        else
+***************
+*** 2759,2762 ****
+--- 2857,2871 ----
+      }
+  
++   /* no_symbolic_links == 0 -> use (default) logical view of the file system.
++      local_dirname[0] == '.' && local_dirname[1] == '/' means files in the
++      current directory (./).
++      local_dirname[0] == '.' && local_dirname[1] == 0 means relative pathnames
++      in the current directory (e.g., lib/sh).
++      XXX - should we do spelling correction on these? */
++ 
++   /* This is test as it was in bash-4.2: skip relative pathnames in current
++      directory.  Change test to
++       (local_dirname[0] != '.' || (local_dirname[1] && local_dirname[1] != '/'))
++      if we want to skip paths beginning with ./ also. */
+    if (no_symbolic_links == 0 && (local_dirname[0] != '.' || local_dirname[1]))
+      {
+***************
+*** 2764,2767 ****
+--- 2873,2885 ----
+        int len1, len2;
+  
++       /* If we have a relative path
++       		(local_dirname[0] != '/' && local_dirname[0] != '.')
++ 	 that is canonical after appending it to the current directory, then
++ 	 	temp1 = temp2+'/'
++ 	 That is,
++ 	 	strcmp (temp1, temp2) == 0
++ 	 after adding a slash to temp2 below.  It should be safe to not
++ 	 change those.
++       */
+        t = get_working_directory ("symlink-hook");
+        temp1 = make_absolute (local_dirname, t);
+***************
+*** 2798,2802 ****
+  	    }
+  	}
+!       return_value |= STREQ (local_dirname, temp2) == 0;
+        free (local_dirname);
+        *dirname = temp2;
+--- 2916,2928 ----
+  	    }
+  	}
+! 
+!       /* dircomplete_expand_relpath == 0 means we want to leave relative
+! 	 pathnames that are unchanged by canonicalization alone.
+! 	 *local_dirname != '/' && *local_dirname != '.' == relative pathname
+! 	 (consistent with general.c:absolute_pathname())
+! 	 temp1 == temp2 (after appending a slash to temp2) means the pathname
+! 	 is not changed by canonicalization as described above. */
+!       if (dircomplete_expand_relpath || ((local_dirname[0] != '/' && local_dirname[0] != '.') && STREQ (temp1, temp2) == 0))
+! 	return_value |= STREQ (local_dirname, temp2) == 0;
+        free (local_dirname);
+        *dirname = temp2;
+***************
+*** 3003,3012 ****
+    orig_func = rl_completion_entry_function;
+    orig_attempt_func = rl_attempted_completion_function;
+-   orig_dir_func = rl_directory_rewrite_hook;
+    orig_ignore_func = rl_ignore_some_completions_function;
+    orig_rl_completer_word_break_characters = rl_completer_word_break_characters;
+    rl_completion_entry_function = rl_filename_completion_function;
+    rl_attempted_completion_function = (rl_completion_func_t *)NULL;
+-   rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL;
+    rl_ignore_some_completions_function = filename_completion_ignore;
+    rl_completer_word_break_characters = " \t\n\"\'";
+--- 3129,3139 ----
+    orig_func = rl_completion_entry_function;
+    orig_attempt_func = rl_attempted_completion_function;
+    orig_ignore_func = rl_ignore_some_completions_function;
+    orig_rl_completer_word_break_characters = rl_completer_word_break_characters;
++ 
++   orig_dir_func = save_directory_hook ();
++ 
+    rl_completion_entry_function = rl_filename_completion_function;
+    rl_attempted_completion_function = (rl_completion_func_t *)NULL;
+    rl_ignore_some_completions_function = filename_completion_ignore;
+    rl_completer_word_break_characters = " \t\n\"\'";
+***************
+*** 3016,3023 ****
+    rl_completion_entry_function = orig_func;
+    rl_attempted_completion_function = orig_attempt_func;
+-   rl_directory_rewrite_hook = orig_dir_func;
+    rl_ignore_some_completions_function = orig_ignore_func;
+    rl_completer_word_break_characters = orig_rl_completer_word_break_characters;
+  
+    return r;
+  }
+--- 3143,3151 ----
+    rl_completion_entry_function = orig_func;
+    rl_attempted_completion_function = orig_attempt_func;
+    rl_ignore_some_completions_function = orig_ignore_func;
+    rl_completer_word_break_characters = orig_rl_completer_word_break_characters;
+  
++   restore_directory_hook (orig_dir_func);
++ 
+    return r;
+  }
+diff -NrC 2 ../bash-4.2-patched/bashline.h ./bashline.h
+*** ../bash-4.2-patched/bashline.h	2009-01-04 14:32:22.000000000 -0500
+--- ./bashline.h	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 34,41 ****
+--- 34,46 ----
+  extern int bash_re_edit __P((char *));
+  
++ extern void bashline_set_event_hook __P((void));
++ extern void bashline_reset_event_hook __P((void));
++ 
+  extern int bind_keyseq_to_unix_command __P((char *));
+  
+  extern char **bash_default_completion __P((const char *, int, int, int, int));
+  
++ void set_directory_hook __P((void));
++ 
+  /* Used by programmable completion code. */
+  extern char *command_word_completion_function __P((const char *, int));
+diff -NrC 2 ../bash-4.2-patched/builtins/shopt.def ./builtins/shopt.def
+*** ../bash-4.2-patched/builtins/shopt.def	2010-07-02 22:42:44.000000000 -0400
+--- ./builtins/shopt.def	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 62,65 ****
+--- 62,69 ----
+  #include "bashgetopt.h"
+  
++ #if defined (READLINE)
++ #  include "../bashline.h"
++ #endif
++ 
+  #if defined (HISTORY)
+  #  include "../bashhist.h"
+***************
+*** 95,99 ****
+  extern int no_empty_command_completion;
+  extern int force_fignore;
+! extern int dircomplete_spelling;
+  
+  extern int enable_hostname_completion __P((int));
+--- 99,103 ----
+  extern int no_empty_command_completion;
+  extern int force_fignore;
+! extern int dircomplete_spelling, dircomplete_expand;
+  
+  extern int enable_hostname_completion __P((int));
+***************
+*** 122,125 ****
+--- 126,133 ----
+  #endif
+  
++ #if defined (READLINE)
++ static int shopt_set_complete_direxpand __P((char *, int));
++ #endif
++ 
+  static int shopt_login_shell;
+  static int shopt_compat31;
+***************
+*** 151,154 ****
+--- 159,163 ----
+    { "compat41", &shopt_compat41, set_compatibility_level },
+  #if defined (READLINE)
++   { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand },
+    { "dirspell", &dircomplete_spelling, (shopt_set_func_t *)NULL },
+  #endif
+***************
+*** 536,539 ****
+--- 545,559 ----
+  }
+  
++ #if defined (READLINE)
++ static int
++ shopt_set_complete_direxpand (option_name, mode)
++      char *option_name;
++      int mode;
++ {
++   set_directory_hook ();
++   return 0;
++ }
++ #endif
++ 
+  #if defined (RESTRICTED_SHELL)
+  /* Don't allow the value of restricted_shell to be modified. */
+Binary files ../bash-4.2-patched/doc/._bashref.pdf and ./doc/._bashref.pdf differ
+diff -NrC 2 ../bash-4.2-patched/doc/bash.1 ./doc/bash.1
+*** ../bash-4.2-patched/doc/bash.1	2011-01-16 15:31:39.000000000 -0500
+--- ./doc/bash.1	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 8949,8952 ****
+--- 8949,8962 ----
+  The default bash behavior remains as in previous versions.
+  .TP 8
++ .B direxpand
++ If set,
++ .B bash
++ replaces directory names with the results of word expansion when performing
++ filename completion.  This changes the contents of the readline editing
++ buffer.
++ If not set,
++ .B bash
++ attempts to preserve what the user typed.
++ .TP 8
+  .B dirspell
+  If set,
+diff -NrC 2 ../bash-4.2-patched/doc/bashref.texi ./doc/bashref.texi
+*** ../bash-4.2-patched/doc/bashref.texi	2011-01-16 15:31:57.000000000 -0500
+--- ./doc/bashref.texi	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 4536,4539 ****
+--- 4536,4546 ----
+  The default Bash behavior remains as in previous versions.
+  
++ @item direxpand
++ If set, Bash
++ replaces directory names with the results of word expansion when performing
++ filename completion.  This changes the contents of the readline editing
++ buffer.
++ If not set, Bash attempts to preserve what the user typed.
++ 
+  @item dirspell
+  If set, Bash
+diff -NrC 2 ../bash-4.2-patched/tests/shopt.right ./tests/shopt.right
+*** ../bash-4.2-patched/tests/shopt.right	2010-07-02 23:36:30.000000000 -0400
+--- ./tests/shopt.right	2012-05-07 16:27:18.000000000 -0400
+***************
+*** 13,16 ****
+--- 13,17 ----
+  shopt -u compat40
+  shopt -u compat41
++ shopt -u direxpand
+  shopt -u dirspell
+  shopt -u dotglob
+***************
+*** 69,72 ****
+--- 70,74 ----
+  shopt -u compat40
+  shopt -u compat41
++ shopt -u direxpand
+  shopt -u dirspell
+  shopt -u dotglob
+***************
+*** 102,105 ****
+--- 104,108 ----
+  compat40       	off
+  compat41       	off
++ direxpand      	off
+  dirspell       	off
+  dotglob        	off
+*** ../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 28
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 29
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-030.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,178 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-030
+
+Bug-Reported-by:	Roman Rakus <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00126.html
+
+Bug-Description:
+
+When attempting to glob strings in a multibyte locale, and those strings
+contain invalid multibyte characters that cause mbsnrtowcs to return 0,
+the globbing code loops infinitely.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/glob/xmbsrtowcs.c	2010-05-30 18:36:27.000000000 -0400
+--- lib/glob/xmbsrtowcs.c	2011-03-22 16:06:47.000000000 -0400
+***************
+*** 36,39 ****
+--- 36,41 ----
+  #if HANDLE_MULTIBYTE
+  
++ #define WSBUF_INC 32
++ 
+  #ifndef FREE
+  #  define FREE(x)	do { if (x) free (x); } while (0)
+***************
+*** 149,153 ****
+    size_t wcnum;		/* Number of wide characters in WSBUF */
+    mbstate_t state;	/* Conversion State */
+!   size_t wcslength;	/* Number of wide characters produced by the conversion. */
+    const char *end_or_backslash;
+    size_t nms;	/* Number of multibyte characters to convert at one time. */
+--- 151,155 ----
+    size_t wcnum;		/* Number of wide characters in WSBUF */
+    mbstate_t state;	/* Conversion State */
+!   size_t n, wcslength;	/* Number of wide characters produced by the conversion. */
+    const char *end_or_backslash;
+    size_t nms;	/* Number of multibyte characters to convert at one time. */
+***************
+*** 172,176 ****
+        tmp_p = p;
+        tmp_state = state;
+!       wcslength = mbsnrtowcs(NULL, &tmp_p, nms, 0, &tmp_state);
+  
+        /* Conversion failed. */
+--- 174,189 ----
+        tmp_p = p;
+        tmp_state = state;
+! 
+!       if (nms == 0 && *p == '\\')	/* special initial case */
+! 	nms = wcslength = 1;
+!       else
+! 	wcslength = mbsnrtowcs (NULL, &tmp_p, nms, 0, &tmp_state);
+! 
+!       if (wcslength == 0)
+! 	{
+! 	  tmp_p = p;		/* will need below */
+! 	  tmp_state = state;
+! 	  wcslength = 1;	/* take a single byte */
+! 	}
+  
+        /* Conversion failed. */
+***************
+*** 187,191 ****
+  	  wchar_t *wstmp;
+  
+! 	  wsbuf_size = wcnum+wcslength+1;	/* 1 for the L'\0' or the potential L'\\' */
+  
+  	  wstmp = (wchar_t *) realloc (wsbuf, wsbuf_size * sizeof (wchar_t));
+--- 200,205 ----
+  	  wchar_t *wstmp;
+  
+! 	  while (wsbuf_size < wcnum+wcslength+1) /* 1 for the L'\0' or the potential L'\\' */
+! 	    wsbuf_size += WSBUF_INC;
+  
+  	  wstmp = (wchar_t *) realloc (wsbuf, wsbuf_size * sizeof (wchar_t));
+***************
+*** 200,207 ****
+  
+        /* Perform the conversion. This is assumed to return 'wcslength'.
+!        * It may set 'p' to NULL. */
+!       mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state);
+  
+!       wcnum += wcslength;
+  
+        if (mbsinit (&state) && (p != NULL) && (*p == '\\'))
+--- 214,229 ----
+  
+        /* Perform the conversion. This is assumed to return 'wcslength'.
+! 	 It may set 'p' to NULL. */
+!       n = mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state);
+  
+!       /* Compensate for taking single byte on wcs conversion failure above. */
+!       if (wcslength == 1 && (n == 0 || n == (size_t)-1))
+! 	{
+! 	  state = tmp_state;
+! 	  p = tmp_p;
+! 	  wsbuf[wcnum++] = *p++;
+! 	}
+!       else
+!         wcnum += wcslength;
+  
+        if (mbsinit (&state) && (p != NULL) && (*p == '\\'))
+***************
+*** 231,236 ****
+     of DESTP and INDICESP are NULL. */
+  
+- #define WSBUF_INC 32
+- 
+  size_t
+  xdupmbstowcs (destp, indicesp, src)
+--- 253,256 ----
+*** ../bash-4.2-patched/lib/glob/glob.c	2009-11-14 18:39:30.000000000 -0500
+--- lib/glob/glob.c	2012-07-07 12:09:56.000000000 -0400
+***************
+*** 201,206 ****
+    size_t pat_n, dn_n;
+  
+    pat_n = xdupmbstowcs (&pat_wc, NULL, pat);
+!   dn_n = xdupmbstowcs (&dn_wc, NULL, dname);
+  
+    ret = 0;
+--- 201,209 ----
+    size_t pat_n, dn_n;
+  
++   pat_wc = dn_wc = (wchar_t *)NULL;
++ 
+    pat_n = xdupmbstowcs (&pat_wc, NULL, pat);
+!   if (pat_n != (size_t)-1)
+!     dn_n = xdupmbstowcs (&dn_wc, NULL, dname);
+  
+    ret = 0;
+***************
+*** 222,225 ****
+--- 225,230 ----
+  	ret = 1;
+      }
++   else
++     ret = skipname (pat, dname, flags);
+  
+    FREE (pat_wc);
+***************
+*** 267,272 ****
+    n = xdupmbstowcs (&wpathname, NULL, pathname);
+    if (n == (size_t) -1)
+!     /* Something wrong. */
+!     return;
+    orig_wpathname = wpathname;
+  
+--- 272,280 ----
+    n = xdupmbstowcs (&wpathname, NULL, pathname);
+    if (n == (size_t) -1)
+!     {
+!       /* Something wrong.  Fall back to single-byte */
+!       udequote_pathname (pathname);
+!       return;
+!     }
+    orig_wpathname = wpathname;
+  
+*** ../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 29
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 30
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-031.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,80 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-031
+
+Bug-Reported-by:	Max Horn <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-readline/2012-06/msg00005.html
+
+Bug-Description:
+
+A change between bash-4.1 and bash-4.2 to prevent the readline input hook
+from being called too frequently had the side effect of causing delays
+when reading pasted input on systems such as Mac OS X.  This patch fixes
+those delays while retaining the bash-4.2 behavior.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/readline/input.c	2010-05-30 18:33:01.000000000 -0400
+--- lib/readline/input.c	2012-06-25 21:08:42.000000000 -0400
+***************
+*** 410,414 ****
+  rl_read_key ()
+  {
+!   int c;
+  
+    rl_key_sequence_length++;
+--- 412,416 ----
+  rl_read_key ()
+  {
+!   int c, r;
+  
+    rl_key_sequence_length++;
+***************
+*** 430,441 ****
+  	  while (rl_event_hook)
+  	    {
+! 	      if (rl_gather_tyi () < 0)	/* XXX - EIO */
+  		{
+  		  rl_done = 1;
+  		  return ('\n');
+  		}
+  	      RL_CHECK_SIGNALS ();
+- 	      if (rl_get_char (&c) != 0)
+- 		break;
+  	      if (rl_done)		/* XXX - experimental */
+  		return ('\n');
+--- 432,447 ----
+  	  while (rl_event_hook)
+  	    {
+! 	      if (rl_get_char (&c) != 0)
+! 		break;
+! 		
+! 	      if ((r = rl_gather_tyi ()) < 0)	/* XXX - EIO */
+  		{
+  		  rl_done = 1;
+  		  return ('\n');
+  		}
++ 	      else if (r == 1)			/* read something */
++ 		continue;
++ 
+  	      RL_CHECK_SIGNALS ();
+  	      if (rl_done)		/* XXX - experimental */
+  		return ('\n');
+*** ../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 30
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 31
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-032.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,75 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-032
+
+Bug-Reported-by:	Ruediger Kuhlmann <[email protected]>
+Bug-Reference-ID:	<OFDE975207.0C3622E5-ONC12579F3.00361A06-C12579F3.00365E39@orga-systems.com>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-05/msg00010.html
+
+Bug-Description:
+
+Bash-4.2 has problems with DEL characters in the expanded value of variables
+used in the same quoted string as variables that expand to nothing.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-20120427/subst.c	2012-04-22 16:19:10.000000000 -0400
+--- subst.c	2012-05-07 16:06:35.000000000 -0400
+***************
+*** 8152,8155 ****
+--- 8152,8163 ----
+  	  dispose_word_desc (tword);
+  
++ 	  /* Kill quoted nulls; we will add them back at the end of
++ 	     expand_word_internal if nothing else in the string */
++ 	  if (had_quoted_null && temp && QUOTED_NULL (temp))
++ 	    {
++ 	      FREE (temp);
++ 	      temp = (char *)NULL;
++ 	    }
++ 
+  	  goto add_string;
+  	  break;
+***************
+*** 8556,8560 ****
+        if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+  	tword->flags |= W_QUOTED;
+!       if (had_quoted_null)
+  	tword->flags |= W_HASQUOTEDNULL;
+        list = make_word_list (tword, (WORD_LIST *)NULL);
+--- 8564,8568 ----
+        if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+  	tword->flags |= W_QUOTED;
+!       if (had_quoted_null && QUOTED_NULL (istring))
+  	tword->flags |= W_HASQUOTEDNULL;
+        list = make_word_list (tword, (WORD_LIST *)NULL);
+***************
+*** 8587,8591 ****
+  	  if (word->flags & W_NOEXPAND)
+  	    tword->flags |= W_NOEXPAND;
+! 	  if (had_quoted_null)
+  	    tword->flags |= W_HASQUOTEDNULL;	/* XXX */
+  	  list = make_word_list (tword, (WORD_LIST *)NULL);
+--- 8595,8599 ----
+  	  if (word->flags & W_NOEXPAND)
+  	    tword->flags |= W_NOEXPAND;
+! 	  if (had_quoted_null && QUOTED_NULL (istring))
+  	    tword->flags |= W_HASQUOTEDNULL;	/* XXX */
+  	  list = make_word_list (tword, (WORD_LIST *)NULL);
+*** ../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 31
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 32
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-033.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,57 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-033
+
+Bug-Reported-by:	David Leverton <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:
+
+Bug-Description:
+
+Bash uses a static buffer when expanding the /dev/fd prefix for the test
+and conditional commands, among other uses, when it should use a dynamic
+buffer to avoid buffer overflow.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/sh/eaccess.c	2011-01-08 20:50:10.000000000 -0500
+--- lib/sh/eaccess.c	2012-06-04 21:06:43.000000000 -0400
+***************
+*** 83,86 ****
+--- 83,88 ----
+       struct stat *finfo;
+  {
++   static char *pbuf = 0;
++ 
+    if (*path == '\0')
+      {
+***************
+*** 107,111 ****
+       On most systems, with the notable exception of linux, this is
+       effectively a no-op. */
+!       char pbuf[32];
+        strcpy (pbuf, DEV_FD_PREFIX);
+        strcat (pbuf, path + 8);
+--- 109,113 ----
+       On most systems, with the notable exception of linux, this is
+       effectively a no-op. */
+!       pbuf = xrealloc (pbuf, sizeof (DEV_FD_PREFIX) + strlen (path + 8));
+        strcpy (pbuf, DEV_FD_PREFIX);
+        strcat (pbuf, path + 8);
+*** ../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 32
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 33
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-034.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-034
+
+Bug-Reported-by:	"Davide Brini" <[email protected]>
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-06/msg00030.html
+
+Bug-Description:
+
+In bash-4.2, the history code would inappropriately add a semicolon to
+multi-line compound array assignments when adding them to the history.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/parse.y	2011-11-21 18:03:36.000000000 -0500
+--- parse.y	2012-06-07 12:48:47.000000000 -0400
+***************
+*** 4900,4905 ****
+--- 4916,4924 ----
+        return (current_command_line_count == 2 ? "\n" : "");
+      }
+  
++   if (parser_state & PST_COMPASSIGN)
++     return (" ");
++ 
+    /* First, handle some special cases. */
+    /*(*/
+    /* If we just read `()', assume it's a function definition, and don't
+*** ../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 33
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 34
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-035.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,66 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-035
+
+Bug-Reported-by:	Dan Douglas <[email protected]>
+Bug-Reference-ID:	<2766482.Ksm3GrSoYi@smorgbox>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-06/msg00071.html
+
+Bug-Description:
+
+When given a number of lines to read, `mapfile -n lines' reads one too many.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/mapfile.def	2010-05-29 22:09:47.000000000 -0400
+--- builtins/mapfile.def	2012-06-20 09:48:33.000000000 -0400
+***************
+*** 196,206 ****
+    interrupt_immediately++;
+    for (array_index = origin, line_count = 1; 
+!        zgetline (fd, &line, &line_length, unbuffered_read) != -1;
+!        array_index++, line_count++) 
+      {
+-       /* Have we exceeded # of lines to store? */
+-       if (line_count_goal != 0 && line_count > line_count_goal) 
+- 	break;
+- 
+        /* Remove trailing newlines? */
+        if (flags & MAPF_CHOP)
+--- 196,202 ----
+    interrupt_immediately++;
+    for (array_index = origin, line_count = 1; 
+!  	zgetline (fd, &line, &line_length, unbuffered_read) != -1;
+! 	array_index++) 
+      {
+        /* Remove trailing newlines? */
+        if (flags & MAPF_CHOP)
+***************
+*** 218,221 ****
+--- 214,222 ----
+  
+        bind_array_element (entry, array_index, line, 0);
++ 
++       /* Have we exceeded # of lines to store? */
++       line_count++;
++       if (line_count_goal != 0 && line_count > line_count_goal) 
++ 	break;
+      }
+  
+*** ../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 34
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 35
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-036.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,92 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-036
+
+Bug-Reported-by:	gregrwm <[email protected]>
+Bug-Reference-ID:	<CAD+dB9B4JG+qUwZBQUwiQmVt0j6NDn=DDTxr9R+nkA8DL4KLJA@mail.gmail.com>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-05/msg00108.html
+
+Bug-Description:
+
+Bash-4.2 produces incorrect word splitting results when expanding
+double-quoted $@ in the same string as and adjacent to other variable
+expansions.  The $@ should be split, the other expansions should not.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/subst.c	2012-05-02 12:02:33.000000000 -0400
+--- subst.c	2012-07-08 21:19:32.000000000 -0400
+***************
+*** 7923,7927 ****
+    /* State flags */
+    int had_quoted_null;
+!   int has_dollar_at;
+    int tflag;
+    int pflags;			/* flags passed to param_expand */
+--- 7923,7927 ----
+    /* State flags */
+    int had_quoted_null;
+!   int has_dollar_at, temp_has_dollar_at;
+    int tflag;
+    int pflags;			/* flags passed to param_expand */
+***************
+*** 8128,8138 ****
+  	    *expanded_something = 1;
+  
+! 	  has_dollar_at = 0;
+  	  pflags = (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0;
+  	  if (word->flags & W_NOSPLIT2)
+  	    pflags |= PF_NOSPLIT2;
+  	  tword = param_expand (string, &sindex, quoted, expanded_something,
+! 			       &has_dollar_at, &quoted_dollar_at,
+  			       &had_quoted_null, pflags);
+  
+  	  if (tword == &expand_wdesc_error || tword == &expand_wdesc_fatal)
+--- 8128,8139 ----
+  	    *expanded_something = 1;
+  
+! 	  temp_has_dollar_at = 0;
+  	  pflags = (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0;
+  	  if (word->flags & W_NOSPLIT2)
+  	    pflags |= PF_NOSPLIT2;
+  	  tword = param_expand (string, &sindex, quoted, expanded_something,
+! 			       &temp_has_dollar_at, &quoted_dollar_at,
+  			       &had_quoted_null, pflags);
++ 	  has_dollar_at += temp_has_dollar_at;
+  
+  	  if (tword == &expand_wdesc_error || tword == &expand_wdesc_fatal)
+***************
+*** 8275,8281 ****
+  	      temp = (char *)NULL;
+  
+! 	      has_dollar_at = 0;
+  	      /* Need to get W_HASQUOTEDNULL flag through this function. */
+! 	      list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &has_dollar_at, (int *)NULL);
+  
+  	      if (list == &expand_word_error || list == &expand_word_fatal)
+--- 8276,8283 ----
+  	      temp = (char *)NULL;
+  
+! 	      temp_has_dollar_at = 0;	/* XXX */
+  	      /* Need to get W_HASQUOTEDNULL flag through this function. */
+! 	      list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &temp_has_dollar_at, (int *)NULL);
+! 	      has_dollar_at += temp_has_dollar_at;
+  
+  	      if (list == &expand_word_error || list == &expand_word_fatal)
+*** ../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 35
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 36
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-037.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,112 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-037
+
+Bug-Reported-by:	Jakub Filak
+Bug-Reference-ID:
+Bug-Reference-URL:	https://bugzilla.redhat.com/show_bug.cgi?id=813289
+
+Bug-Description:
+
+Attempting to redo (using `.') the vi editing mode `cc', `dd', or `yy'
+commands leads to an infinite loop.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/lib/readline/vi_mode.c	2011-02-25 11:17:02.000000000 -0500
+--- lib/readline/vi_mode.c	2012-06-02 12:24:47.000000000 -0400
+***************
+*** 1235,1243 ****
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+!   else if (vi_redoing)
+      {
+        _rl_vimvcxt->motion = _rl_vi_last_motion;
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+  #if defined (READLINE_CALLBACKS)
+    else if (RL_ISSTATE (RL_STATE_CALLBACK))
+--- 1297,1313 ----
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+!   else if (vi_redoing && _rl_vi_last_motion != 'd')	/* `dd' is special */
+      {
+        _rl_vimvcxt->motion = _rl_vi_last_motion;
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
++   else if (vi_redoing)		/* handle redoing `dd' here */
++     {
++       _rl_vimvcxt->motion = _rl_vi_last_motion;
++       rl_mark = rl_end;
++       rl_beg_of_line (1, key);
++       RL_UNSETSTATE (RL_STATE_VIMOTION);
++       r = vidomove_dispatch (_rl_vimvcxt);
++     }
+  #if defined (READLINE_CALLBACKS)
+    else if (RL_ISSTATE (RL_STATE_CALLBACK))
+***************
+*** 1317,1325 ****
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+!   else if (vi_redoing)
+      {
+        _rl_vimvcxt->motion = _rl_vi_last_motion;
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+  #if defined (READLINE_CALLBACKS)
+    else if (RL_ISSTATE (RL_STATE_CALLBACK))
+--- 1387,1403 ----
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
+!   else if (vi_redoing && _rl_vi_last_motion != 'c')	/* `cc' is special */
+      {
+        _rl_vimvcxt->motion = _rl_vi_last_motion;
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
++   else if (vi_redoing)		/* handle redoing `cc' here */
++     {
++       _rl_vimvcxt->motion = _rl_vi_last_motion;
++       rl_mark = rl_end;
++       rl_beg_of_line (1, key);
++       RL_UNSETSTATE (RL_STATE_VIMOTION);
++       r = vidomove_dispatch (_rl_vimvcxt);
++     }
+  #if defined (READLINE_CALLBACKS)
+    else if (RL_ISSTATE (RL_STATE_CALLBACK))
+***************
+*** 1378,1381 ****
+--- 1456,1472 ----
+        r = rl_domove_motion_callback (_rl_vimvcxt);
+      }
++   else if (vi_redoing && _rl_vi_last_motion != 'y')	/* `yy' is special */
++     {
++       _rl_vimvcxt->motion = _rl_vi_last_motion;
++       r = rl_domove_motion_callback (_rl_vimvcxt);
++     }
++   else if (vi_redoing)			/* handle redoing `yy' here */
++     {
++       _rl_vimvcxt->motion = _rl_vi_last_motion;
++       rl_mark = rl_end;
++       rl_beg_of_line (1, key);
++       RL_UNSETSTATE (RL_STATE_VIMOTION);
++       r = vidomove_dispatch (_rl_vimvcxt);
++     }
+  #if defined (READLINE_CALLBACKS)
+    else if (RL_ISSTATE (RL_STATE_CALLBACK))
+*** ../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 36
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 37
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-038.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,47 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-038
+
+Bug-Reported-by:	[email protected]
+Bug-Reference-ID:	<[email protected]>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-08/msg00049.html
+
+Bug-Description:
+
+If a backslash-newline (which is removed) with no other input is given as
+input to `read', the shell tries to dereference a null pointer and seg faults.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/builtins/read.def	2012-03-11 17:52:44.000000000 -0400
+--- builtins/read.def	2012-08-22 11:53:09.000000000 -0400
+***************
+*** 792,796 ****
+  #endif
+  
+!   if (saw_escape)
+      {
+        t = dequote_string (input_string);
+--- 847,851 ----
+  #endif
+  
+!   if (saw_escape && input_string && *input_string)
+      {
+        t = dequote_string (input_string);
+*** ../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 37
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 38
+  
+  #endif /* _PATCHLEVEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/bash42-039.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,58 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	4.2
+Patch-ID:	bash42-039
+
+Bug-Reported-by:	Dan Douglas <[email protected]>
+Bug-Reference-ID:	<1498458.MpVlmOXDB7@smorgbox>
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-09/msg00008.html
+
+Bug-Description:
+
+Under certain circumstances, bash attempts to expand variables in arithmetic
+expressions even when evaluation is being suppressed.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.2-patched/expr.c	2011-11-21 18:03:35.000000000 -0500
+--- expr.c	2012-09-09 16:31:18.000000000 -0400
+***************
+*** 1010,1013 ****
+--- 1073,1082 ----
+  #endif
+  
++ /*itrace("expr_streval: %s: noeval = %d", tok, noeval);*/
++   /* If we are suppressing evaluation, just short-circuit here instead of
++      going through the rest of the evaluator. */
++   if (noeval)
++     return (0);
++ 
+    /* [[[[[ */
+  #if defined (ARRAY_VARS)
+***************
+*** 1183,1186 ****
+--- 1256,1263 ----
+  
+        *cp = '\0';
++       /* XXX - watch out for pointer aliasing issues here */
++       if (curlval.tokstr && curlval.tokstr == tokstr)
++ 	init_lvalue (&curlval);
++ 
+        FREE (tokstr);
+        tokstr = savestring (tp);
+*** ../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 38
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 39
+  
+  #endif /* _PATCHLEVEL_H_ */
--- a/components/bash/patches/solaris-002.Makefile.in.3.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-002.Makefile.in.3.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,5 +1,5 @@
---- Makefile.in	2009-12-30 10:05:40.000000000 -0800
-+++ Makefile.in	2011-02-04 16:31:01.659698136 -0800
+--- Makefile.in	2010-11-30 16:22:42.000000000 -0800
++++ Makefile.in	2011-11-29 09:25:06.137627684 -0800
 @@ -137,7 +137,7 @@
  STATIC_LD = @STATIC_LD@
  LOCAL_LDFLAGS = @LOCAL_LDFLAGS@
@@ -9,7 +9,7 @@
  
  BASE_CCFLAGS = $(PROFILE_FLAGS) $(SYSTEM_FLAGS) $(LOCAL_DEFS) \
  	  $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES)
-@@ -535,7 +535,7 @@
+@@ -538,7 +538,7 @@
  
  $(Program):  .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP)
  	$(RM) $@
@@ -18,7 +18,7 @@
  	ls -l $(Program)
  	-$(SIZE) $(Program)
  
-@@ -549,10 +549,10 @@
+@@ -552,10 +552,10 @@
  	@echo
  
  bashbug: $(SUPPORT_SRC)bashbug.sh config.h Makefile $(VERSPROG)
@@ -33,3 +33,12 @@
  	     $(SUPPORT_SRC)bashbug.sh > $@
  	@chmod a+rx bashbug
  
+@@ -842,7 +842,7 @@
+ 	@-test -d tests || mkdir tests
+ 	@cp $(TESTS_SUPPORT) tests
+ 	@( cd $(srcdir)/tests && \
+-		PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
++	    PATH=/usr/gnu/bin:$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
+ 
+ symlinks:
+ 	$(SHELL) $(SUPPORT_SRC)fixlinks -s $(srcdir)
--- a/components/bash/patches/solaris-004.snprintf.c.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-004.snprintf.c.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,6 +1,6 @@
---- lib/sh/snprintf.c	2008-08-12 12:02:14.000000000 -0400
-+++ lib/sh/snprintf.c	2009-08-10 15:16:30.000000000 -0400
-@@ -116,6 +116,8 @@
+--- lib/sh/snprintf.c	2010-05-30 15:34:52.000000000 -0700
++++ lib/sh/snprintf.c	2011-11-29 09:31:46.751983149 -0800
+@@ -120,6 +120,8 @@
  #  include <locale.h>
  #endif
  
--- a/components/bash/patches/solaris-005.variables.c.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-005.variables.c.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,15 +1,17 @@
---- variables.c	2009-01-04 14:32:46.000000000 -0500
-+++ variables.c	2009-08-15 14:53:56.426776000 -0400
-@@ -402,14 +402,10 @@
+--- variables.c	2011-01-24 17:07:48.000000000 -0800
++++ variables.c	2011-11-29 09:29:51.902791524 -0800
+@@ -417,14 +417,12 @@
    /* Now make our own defaults in case the vars that we think are
       important are missing. */
    temp_var = set_if_not ("PATH", DEFAULT_PATH_VALUE);
 -#if 0
++
    set_auto_export (temp_var);	/* XXX */
 -#endif
  
    temp_var = set_if_not ("TERM", "dumb");
 -#if 0
++
    set_auto_export (temp_var);	/* XXX */
 -#endif
  
--- a/components/bash/patches/solaris-006.signames.c.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
---- support/signames.c	2008-08-13 08:31:48.000000000 -0400
-+++ support/signames.c	2009-08-15 16:40:01.729682000 -0400
-@@ -212,6 +212,14 @@
-   signal_names[SIGXRES] = "SIGXRES";
- #endif
- 
-+#if defined (SIGJVM1) /* Solaris Java Virtual Machine 1 */
-+  signal_names[SIGJVM1] = "SIGJVM1";
-+#endif
-+
-+#if defined (SIGJVM2) /* Solaris Java Virtual Machine 2 */
-+  signal_names[SIGJVM2] = "SIGJVM2";
-+#endif
-+
- /* HP-UX */
- #if defined (SIGDIL)	/* DIL signal (?) */
-   signal_names[SIGDIL] = "SIGDIL";
--- a/components/bash/patches/solaris-008.xmbsrtowcs.c.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-008.xmbsrtowcs.c.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,11 +1,11 @@
---- lib/glob/xmbsrtowcs.c	2008-08-12 10:17:54.000000000 -0400
-+++ lib/glob/xmbsrtowcs.c	2009-08-10 15:46:18.000000000 -0400
-@@ -30,7 +30,7 @@
+--- lib/glob/xmbsrtowcs.c	2010-05-30 15:36:27.000000000 -0700
++++ lib/glob/xmbsrtowcs.c	2011-11-29 09:34:23.471481937 -0800
+@@ -36,7 +36,7 @@
  #if HANDLE_MULTIBYTE
  
  #ifndef FREE
 -#  define FREE(x)	do { if (x) free (x); } while (0)
-+#  define FREE(x)	do { if (x) free (x);  x = 0; } while (0)
++#  define FREE(x)	do { if (x) free (x); x = 0; } while (0)
  #endif
- /* On some locales (ex. ja_JP.sjis), mbsrtowc doesn't convert 0x5c to U<0x5c>.
-    So, this function is made for converting 0x5c to U<0x5c>. */
+ 
+ #if ! HAVE_STRCHRNUL
--- a/components/bash/patches/solaris-009.configure.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-009.configure.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,11 +1,11 @@
---- configure	2009-12-29 05:34:51.000000000 -0800
-+++ configure	2010-09-01 10:45:06.225859891 -0700
+--- configure	2011-02-07 14:03:22.000000000 -0800
++++ configure	2011-11-14 10:38:12.200623852 -0800
 @@ -1,4 +1,4 @@
 -#! /bin/sh
 +#! /bin/bash
- # From configure.in for Bash 4.1, version 4.019.
+ # From configure.in for Bash 4.2, version 4.037.
  # Guess values for system-dependent variables and create Makefiles.
- # Generated by GNU Autoconf 2.63 for bash 4.1-release.
+ # Generated by GNU Autoconf 2.63 for bash 4.2-release.
 @@ -13,6 +13,8 @@
  ## M4sh Initialization.  ##
  ## --------------------- ##
@@ -24,16 +24,7 @@
  
  # Identity of this package.
  PACKAGE_NAME='bash'
-@@ -3500,7 +3502,7 @@
-   ac_save_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    ac_cv_prog_cc_g=no
--   CFLAGS="-g"
-+   CFLAGS=""
-    cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h.  */
- _ACEOF
-@@ -3579,7 +3581,7 @@
+@@ -3498,7 +3500,7 @@
  sed 's/^/| /' conftest.$ac_ext >&5
  
  	ac_c_werror_flag=$ac_save_c_werror_flag
@@ -42,7 +33,7 @@
  	 cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
-@@ -3638,7 +3640,7 @@
+@@ -3557,7 +3559,7 @@
    if test "$GCC" = yes; then
      CFLAGS="-g -O2"
    else
@@ -51,16 +42,7 @@
    fi
  else
    if test "$GCC" = yes; then
-@@ -5092,7 +5094,7 @@
- 
- if test -z "$CC_FOR_BUILD"; then
-     if test "x$cross_compiling" = "xno"; then
--	CC_FOR_BUILD='$(CC)'
-+	CC_FOR_BUILD='$(CC) $(CPPFLAGS) $(CFLAGS)'
-     else
- 	CC_FOR_BUILD=gcc
-     fi
-@@ -5100,7 +5102,7 @@
+@@ -5019,7 +5021,7 @@
  
  
  
@@ -69,7 +51,7 @@
  
  test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2"
  
-@@ -5132,7 +5134,7 @@
+@@ -5051,7 +5053,7 @@
  	LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""}
  fi
  
@@ -78,14 +60,14 @@
  
  
  
-@@ -5257,9 +5259,14 @@
+@@ -5176,9 +5178,14 @@
  int
  main ()
  {
-+#if defined(sun) || defined(__sun) || defined(__sun__)
-+#error "we want to use libcurses."
-+return 255;
-+#else
++    #if defined(sun) || defined(__sun) || defined(__sun__)
++    #error "we want to use libcurses."
++    return 255;
++    #else
  return tgetent ();
    ;
    return 0;
@@ -93,7 +75,7 @@
  }
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
-@@ -6164,7 +6171,7 @@
+@@ -6083,7 +6090,7 @@
    $as_echo_n "(cached) " >&6
  else
    cat >conftest.make <<\_ACEOF
@@ -102,16 +84,18 @@
  all:
  	@echo '@@@%%%=$(MAKE)=@@@%%%'
  _ACEOF
-@@ -6190,7 +6197,7 @@
+@@ -6108,8 +6115,8 @@
+ 
  
  case "$host_os" in
- opennt*|interix*)	MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
+-opennt*|interix*)	MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 -*)			MAKE_SHELL=/bin/sh ;;
++opennt*|interix*)	MAKE_SHELL="$INTERIX_ROOT/bin/bash" ;;
 +*)			MAKE_SHELL=/bin/bash ;;
  esac
  
  
-@@ -7177,7 +7184,7 @@
+@@ -7096,7 +7103,7 @@
  # Prepare PATH_SEPARATOR.
  # The user is always right.
  if test "${PATH_SEPARATOR+set}" != set; then
@@ -120,7 +104,7 @@
    echo  "exit 0"   >>conf$$.sh
    chmod +x conf$$.sh
    if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-@@ -7191,7 +7198,7 @@
+@@ -7110,7 +7117,7 @@
  # Find out how to test for executable files. Don't use a zero-byte file,
  # as systems may use methods other than mode bits to determine executability.
  cat >conf$$.file <<_ASEOF
@@ -129,7 +113,7 @@
  exit 0
  _ASEOF
  chmod +x conf$$.file
-@@ -7288,7 +7295,7 @@
+@@ -7207,7 +7214,7 @@
  # Prepare PATH_SEPARATOR.
  # The user is always right.
  if test "${PATH_SEPARATOR+set}" != set; then
@@ -138,7 +122,7 @@
    echo  "exit 0"   >>conf$$.sh
    chmod +x conf$$.sh
    if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-@@ -7302,7 +7309,7 @@
+@@ -7221,7 +7228,7 @@
  # Find out how to test for executable files. Don't use a zero-byte file,
  # as systems may use methods other than mode bits to determine executability.
  cat >conf$$.file <<_ASEOF
@@ -147,7 +131,7 @@
  exit 0
  _ASEOF
  chmod +x conf$$.file
-@@ -7359,7 +7366,7 @@
+@@ -7278,7 +7285,7 @@
  # Prepare PATH_SEPARATOR.
  # The user is always right.
  if test "${PATH_SEPARATOR+set}" != set; then
@@ -156,7 +140,7 @@
    echo  "exit 0"   >>conf$$.sh
    chmod +x conf$$.sh
    if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-@@ -7373,7 +7380,7 @@
+@@ -7292,7 +7299,7 @@
  # Find out how to test for executable files. Don't use a zero-byte file,
  # as systems may use methods other than mode bits to determine executability.
  cat >conf$$.file <<_ASEOF
@@ -165,7 +149,7 @@
  exit 0
  _ASEOF
  chmod +x conf$$.file
-@@ -8992,7 +8999,7 @@
+@@ -8911,7 +8918,7 @@
  # Prepare PATH_SEPARATOR.
  # The user is always right.
  if test "${PATH_SEPARATOR+set}" != set; then
@@ -174,7 +158,7 @@
    echo  "exit 0"   >>conf$$.sh
    chmod +x conf$$.sh
    if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-@@ -9102,7 +9109,7 @@
+@@ -9021,7 +9028,7 @@
  else
  
      CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
@@ -183,7 +167,7 @@
      . ./conftest.sh
      rm -f ./conftest.sh
      acl_cv_rpath=done
-@@ -13042,39 +13049,18 @@
+@@ -12962,39 +12969,19 @@
  /* end confdefs.h.  */
  /* Define isinf to an innocuous variant, in case <limits.h> declares isinf.
     For example, HP-UX 11i <limits.h> declares gettimeofday.  */
@@ -201,7 +185,7 @@
 -#endif
 -
 -#undef isinf
--
+ 
 +#include <math.h>
  /* Override any GCC internal prototype to avoid an error.
     Use char because int might match the return type of a GCC
@@ -221,11 +205,11 @@
  main ()
  {
 -return isinf ();
-+return isinf(0.0);
++return isinf (0.0);
    ;
    return 0;
  }
-@@ -13134,39 +13120,26 @@
+@@ -13054,39 +13041,25 @@
  /* end confdefs.h.  */
  /* Define isnan to an innocuous variant, in case <limits.h> declares isnan.
     For example, HP-UX 11i <limits.h> declares gettimeofday.  */
@@ -252,7 +236,6 @@
 -extern "C"
 -#endif
 -char isnan ();
-+
  /* The GNU C library defines this for functions which it implements
      to always fail with ENOSYS.  Some functions are actually named
      something starting with __ and the normal name is an alias.  */
@@ -264,11 +247,11 @@
  main ()
  {
 -return isnan ();
-+return isnan(0.0);
++return isnan (0.0);
    ;
    return 0;
  }
-@@ -25521,7 +25494,7 @@
+@@ -25754,7 +25727,7 @@
  exit 69
  ' >conftest
  chmod u+x conftest
@@ -277,12 +260,65 @@
  if test $? -ne 69; then
     ac_cv_sys_interpreter=yes
  else
-@@ -30117,9 +30090,14 @@
+@@ -30777,28 +30750,17 @@
+ /* end confdefs.h.  */
+ /* Define tgetent to an innocuous variant, in case <limits.h> declares tgetent.
+    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+-#define tgetent innocuous_tgetent
+ 
+ /* System header to define __stub macros and hopefully few prototypes,
+     which can conflict with char tgetent (); below.
+     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+     <limits.h> exists even on freestanding compilers.  */
+ 
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
+-
+-#undef tgetent
+ 
+ /* Override any GCC internal prototype to avoid an error.
+    Use char because int might match the return type of a GCC
+    builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char tgetent ();
++
+ /* The GNU C library defines this for functions which it implements
+     to always fail with ENOSYS.  Some functions are actually named
+     something starting with __ and the normal name is an alias.  */
+@@ -30809,9 +30771,14 @@
  int
  main ()
  {
 +#if defined(sun) || defined(__sun) || defined(__sun__)
-+#error "we want to use libcurses"
++#error "we want to use libcurses."
++return 255;
++#else
+ return tgetent ();
+   ;
+   return 0;
++#endif
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+@@ -30869,16 +30836,18 @@
+ /* Override any GCC internal prototype to avoid an error.
+    Use char because int might match the return type of a GCC
+    builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char tgetent ();
++
+ int
+ main ()
+ {
++#if defined(sun) || defined(__sun) || defined(__sun__)
++#error "we want to use libcurses."
 +return 255;
 +#else
  return tgetent ();
@@ -292,7 +328,30 @@
  }
  _ACEOF
  rm -f conftest.$ac_objext conftest$ac_exeext
-@@ -30302,7 +30280,7 @@
+@@ -30937,16 +30906,18 @@
+ /* Override any GCC internal prototype to avoid an error.
+    Use char because int might match the return type of a GCC
+    builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char tgetent ();
++
+ int
+ main ()
+ {
++#if defined(sun) || defined(__sun) || defined(__sun__)
++#error "we want to use libcurses."
++return 255;
++#else
+ return tgetent ();
+   ;
+   return 0;
++#endif
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+@@ -30994,7 +30965,7 @@
    $as_echo_n "(cached) " >&6
  else
    ac_check_lib_save_LIBS=$LIBS
@@ -301,7 +360,46 @@
  cat >conftest.$ac_ext <<_ACEOF
  /* confdefs.h.  */
  _ACEOF
-@@ -30468,7 +30446,7 @@
+@@ -31002,13 +30973,12 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ 
++#include <curses.h>
++#include <term.h>
++
+ /* Override any GCC internal prototype to avoid an error.
+    Use char because int might match the return type of a GCC
+    builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char tgetent ();
+ int
+ main ()
+ {
+@@ -31073,16 +31043,17 @@
+ /* Override any GCC internal prototype to avoid an error.
+    Use char because int might match the return type of a GCC
+    builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char tgetent ();
+ int
+ main ()
+ {
++#if defined(sun) || defined(__sun) || defined(__sun__)
++#error "we want to use libcurses."
++return 255;
++#else
+ return tgetent ();
+   ;
+   return 0;
++#endif
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+@@ -31160,7 +31131,7 @@
  TERMCAP_LIB=
  TERMCAP_DEP=
  else
@@ -310,7 +408,7 @@
  TERMCAP_DEP=
  fi
  
-@@ -30676,7 +30654,7 @@
+@@ -31368,7 +31339,7 @@
  then
  	{ $as_echo "$as_me:$LINENO: checking shared object configuration for loadable builtins" >&5
  $as_echo_n "checking shared object configuration for loadable builtins... " >&6; }
--- a/components/bash/patches/solaris-013.bashref.info.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-013.bashref.info.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,6 +1,6 @@
---- doc/bashref.info	2009-12-29 12:59:33.000000000 -0800
-+++ doc/bashref.info	2010-09-01 10:49:49.070499702 -0700
-@@ -6387,7 +6387,7 @@
+--- doc/bashref.info	2010-12-28 11:30:25.000000000 -0800
++++ doc/bashref.info	2011-11-29 10:01:55.114483579 -0800
+@@ -6602,7 +6602,7 @@
  directory.  The name of this file is taken from the value of the shell
  variable `INPUTRC'.  If that variable is unset, the default is
  `~/.inputrc'.  If that file does not exist or cannot be read, the
@@ -9,7 +9,7 @@
  
     When a program which uses the Readline library starts up, the init
  file is read, and the key bindings are set.
-@@ -6812,8 +6812,8 @@
+@@ -7045,8 +7045,8 @@
  `$include'
       This directive takes a single filename as an argument and reads
       commands and bindings from that file.  For example, the following
@@ -20,3 +20,14 @@
  
  
  File: bashref.info,  Node: Sample Init File,  Prev: Conditional Init Constructs,  Up: Readline Init File
+@@ -7066,8 +7066,8 @@
+      # Lines beginning with '#' are comments.
+      #
+      # First, include any systemwide bindings and variable
+-     # assignments from /etc/Inputrc
+-     $include /etc/Inputrc
++     # assignments from /etc/bash/inputrc
++     $include /etc/bash/inputrc
+ 
+      #
+      # Set various bindings for emacs mode.
--- a/components/bash/patches/solaris-014.bash.man.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-014.bash.man.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -1,44 +1,25 @@
-*** doc/bash.1.orig	Wed Oct 12 06:45:05 2011
---- doc/bash.1	Wed Oct 12 06:45:46 2011
-***************
-*** 3843,3849 ****
-  .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
-  conditional operator
-  .TP
-! .B = *= /= %= += \-= <<= >>= &= ^= |=
-  assignment
-  .TP
-  .B \fIexpr1\fP , \fIexpr2\fP
---- 3843,3849 ----
-  .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
-  conditional operator
-  .TP
-! .B "= *= /= %= += \-= <<= >>= &= ^= |="
-  assignment
-  .TP
-  .B \fIexpr1\fP , \fIexpr2\fP
-***************
-*** 5235,5245 ****
-  .IP \fB$include\fP
-  This directive takes a single filename as an argument and reads commands
-  and bindings from that file.  For example, the following directive
-! would read \fI/etc/inputrc\fP:
-  .sp 1
-  .RS
-  .nf
-! \fB$include\fP \^ \fI/etc/inputrc\fP
-  .fi
-  .RE
-  .SS Searching
---- 5235,5245 ----
-  .IP \fB$include\fP
-  This directive takes a single filename as an argument and reads commands
-  and bindings from that file.  For example, the following directive
-! would read \fI/etc/bash/inputrc\fP:
-  .sp 1
-  .RS
-  .nf
-! \fB$include\fP \^ \fI/etc/bash/inputrc\fP
-  .fi
-  .RE
-  .SS Searching
+--- doc/bash.1	2011-01-16 12:31:39.000000000 -0800
++++ doc/bash.1	2011-11-29 09:57:25.406978670 -0800
+@@ -3937,7 +3937,7 @@
+ .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
+ conditional operator
+ .TP
+-.B = *= /= %= += \-= <<= >>= &= ^= |=
++.B "= *= /= %= += \-= <<= >>= &= ^= |="
+ assignment
+ .TP
+ .B \fIexpr1\fP , \fIexpr2\fP
+@@ -5340,11 +5340,11 @@
+ .IP \fB$include\fP
+ This directive takes a single filename as an argument and reads commands
+ and bindings from that file.  For example, the following directive
+-would read \fI/etc/inputrc\fP:
++would read \fI/etc/bash/inputrc\fP:
+ .sp 1
+ .RS
+ .nf
+-\fB$include\fP \^ \fI/etc/inputrc\fP
++\fB$include\fP \^ \fI/etc/bash/inputrc\fP
+ .fi
+ .RE
+ .SS Searching
--- a/components/bash/patches/solaris-015.rbash.man.patch	Wed Dec 12 12:18:23 2012 -0800
+++ b/components/bash/patches/solaris-015.rbash.man.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -2,7 +2,7 @@
 +++ doc/rbash.1	2010-09-01 10:52:04.397206373 -0700
 @@ -1,8 +1,8 @@
 -.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.0"
-+.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.1"
++.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.2"
  .SH NAME
  rbash \- restricted bash, see \fBbash\fR(1)
  .SH RESTRICTED SHELL
--- a/components/bash/patches/solaris-016.eaccess.c.patch	Wed Dec 12 12:18:23 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# Backported to bash 4.1 from:
-# http://lists.gnu.org/archive/html/bug-bash/2012-07/msg00027.html
-# Also see:
-# https://bugzilla.redhat.com/show_bug.cgi?id=840091
-# http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3410
-#
---- lib/sh/eaccess.c	2008-08-12 08:50:01.000000000 -0700
-+++ lib/sh/eaccess.c	2012-07-24 09:39:37.970186946 -0700
-@@ -40,6 +40,10 @@
- #if !defined (_POSIX_VERSION) && defined (HAVE_SYS_FILE_H)
- #  include <sys/file.h>
- #endif /* !_POSIX_VERSION */
-+
-+#include <string.h> /* memset(3C) */
-+#include <limits.h> /* _XOPEN_PATH_MAX */
-+
- #include "posixstat.h"
- #include "filecntl.h"
- 
-@@ -82,6 +86,8 @@
-      const char *path;
-      struct stat *finfo;
- {
-+  static char pbuf[_XOPEN_PATH_MAX + 1];
-+
-   if (*path == '\0')
-     {
-       errno = ENOENT;
-@@ -106,9 +112,10 @@
-      trailing slash.  Make sure /dev/fd/xx really uses DEV_FD_PREFIX/xx.
-      On most systems, with the notable exception of linux, this is
-      effectively a no-op. */
--      char pbuf[32];
-+      (void) memset (pbuf, '\0', sizeof(pbuf));
-       strcpy (pbuf, DEV_FD_PREFIX);
--      strcat (pbuf, path + 8);
-+      strncat (pbuf, path + 8,
-+	      (size_t) (sizeof(pbuf) - sizeof(DEV_FD_PREFIX)));
-       return (stat (pbuf, finfo));
- #endif /* !HAVE_DEV_FD */
-     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/solaris-016.run-all.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,31 @@
+--- tests/run-all	1999-10-08 08:07:46.000000000 -0700
++++ tests/run-all	2012-10-10 10:06:33.558822000 -0700
+@@ -1,4 +1,4 @@
+-#! /bin/sh
++#!/bin/bash
+ 
+ PATH=.:$PATH	# just to get recho/zecho/printenv if not run via `make tests'
+ export PATH
+@@ -15,6 +15,11 @@
+ 
+ rm -f /tmp/xx
+ 
++if [ -f /tmp/xx ] ; then
++    echo "someone left a /tmp/xx around. I can't test." 
++    exit 1
++fi
++
+ echo Any output from any test, unless otherwise noted, indicates a possible anomaly
+ 
+ for x in run-*
+@@ -22,8 +27,9 @@
+ 	case $x in
+ 	$0|run-minimal|run-gprof)	;;
+ 	*.orig|*~) ;;
+-	*)	echo $x ; sh $x ;;
++	*) 	echo $x ; ${THIS_SH} $x ;;
+ 	esac
+ done
+ 
+ exit 0
++
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/solaris-017.printf2.sub.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,8 @@
+--- tests/printf2.sub	2009-02-24 11:12:32.000000000 -0800
++++ tests/printf2.sub	2011-11-29 12:15:05.790234777 -0800
+@@ -1,4 +1,5 @@
+ export LANG=en_US.UTF-8
++export LC_ALL=en_US.UTF-8
+ 
+ case $(printf %d\\n \'À) in
+ 192)	exit 0;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/solaris-018.posixexp2.tests.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,14 @@
+--- tests/posixexp2.tests	2010-11-11 17:50:47.000000000 -0800
++++ tests/posixexp2.tests	2012-07-12 13:15:14.818468328 -0700
+@@ -2,6 +2,11 @@
+ 
+ set -o posix
+ 
++xpg=`shopt | grep xpg_echo | awk '{ print $2 }'`
++if [ ${xpg} = "on" ] ; then
++    shopt -u xpg_echo
++fi
++
+ (echo 1 ${IFS+'}'z}) 2>&- || echo failed in 1
+ (echo 2 "${IFS+'}'z}") 2>&- || echo failed in 2
+ (echo 3 "foo ${IFS+'bar} baz") 2>&- || echo failed in 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/solaris-019.eaccess.c.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,36 @@
+--- lib/sh/eaccess.c	2012-10-09 12:45:17.924274300 -0700
++++ lib/sh/eaccess.c	2012-10-09 12:44:21.930979200 -0700
+@@ -40,6 +40,10 @@
+ #if !defined (_POSIX_VERSION) && defined (HAVE_SYS_FILE_H)
+ #  include <sys/file.h>
+ #endif /* !_POSIX_VERSION */
++
++#include <string.h> /* memset(3C) */
++#include <limits.h> /* _XOPEN_PATH_MAX */
++
+ #include "posixstat.h"
+ #include "filecntl.h"
+ 
+@@ -82,7 +86,7 @@
+      const char *path;
+      struct stat *finfo;
+ {
+-  static char *pbuf = 0;
++  static char pbuf[_XOPEN_PATH_MAX + 1];
+ 
+   if (*path == '\0')
+     {
+@@ -108,9 +112,11 @@
+      trailing slash.  Make sure /dev/fd/xx really uses DEV_FD_PREFIX/xx.
+      On most systems, with the notable exception of linux, this is
+      effectively a no-op. */
+-      pbuf = xrealloc (pbuf, sizeof (DEV_FD_PREFIX) + strlen (path + 8));
++  /* The way CVE-2012-3410 was fixed is wrong */
++      (void) memset (pbuf, '\0', sizeof(pbuf));
+       strcpy (pbuf, DEV_FD_PREFIX);
+-      strcat (pbuf, path + 8);
++      strncat (pbuf, path + 8,
++          (size_t) (sizeof(pbuf) - sizeof(DEV_FD_PREFIX)));
+       return (stat (pbuf, finfo));
+ #endif /* !HAVE_DEV_FD */
+     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bash/patches/solaris-020.xcase.c.patch	Thu Dec 13 15:52:21 2012 -0800
@@ -0,0 +1,13 @@
+--- support/xcase.c	2009-01-04 11:32:42.000000000 -0800
++++ support/xcase.c	2012-10-10 10:03:00.641976200 -0700
+@@ -39,9 +39,7 @@
+ #define LOWER	1
+ #define UPPER	2
+ 
+-main(ac, av)
+-int	ac;
+-char	**av;
++int main(int ac, char* av[])
+ {
+ 	int	c, x;
+ 	int	op;