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

Bash-Release:	4.1
Patch-ID:	bash41-004

Bug-Reported-by:	Crestez Dan Leonard <cdleonard@gmail.com>
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_ */
