psss / rpms / bash

Forked from rpms/bash 6 years ago
Clone
Ondrej Oprala bcac4b8
			     BASH PATCH REPORT
Ondrej Oprala bcac4b8
			     =================
Ondrej Oprala bcac4b8
Ondrej Oprala bcac4b8
Bash-Release:	4.2
Ondrej Oprala bcac4b8
Patch-ID:	bash42-048
Ondrej Oprala bcac4b8
Ondrej Oprala bcac4b8
Bug-Reported-by:	Stephane Chazelas <stephane.chazelas@gmail.com>
Ondrej Oprala bcac4b8
Bug-Reference-ID:
Ondrej Oprala bcac4b8
Bug-Reference-URL:
Ondrej Oprala bcac4b8
Ondrej Oprala bcac4b8
Bug-Description:
Ondrej Oprala bcac4b8
Ondrej Oprala bcac4b8
Under certain circumstances, bash will execute user code while processing the
Ondrej Oprala bcac4b8
environment for exported function definitions.
Ondrej Oprala bcac4b8
Ondrej Oprala bcac4b8
Patch (apply with `patch -p0'):
Ondrej Oprala bcac4b8
Ondrej Oprala 7ded18c
*** ../bash-4.2.47/builtins/common.h	2010-05-30 18:31:51.000000000 -0400
Ondrej Oprala 7ded18c
--- builtins/common.h	2014-09-16 19:35:45.000000000 -0400
Ondrej Oprala 7ded18c
***************
Ondrej Oprala 7ded18c
*** 36,39 ****
Ondrej Oprala 7ded18c
--- 36,41 ----
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
  /* Flags for describe_command, shared between type.def and command.def */
Ondrej Oprala 7ded18c
+ #define SEVAL_FUNCDEF	0x080		/* only allow function definitions */
Ondrej Oprala 7ded18c
+ #define SEVAL_ONECMD	0x100		/* only allow a single command */
Ondrej Oprala 7ded18c
  #define CDESC_ALL		0x001	/* type -a */
Ondrej Oprala 7ded18c
  #define CDESC_SHORTDESC		0x002	/* command -V */
Ondrej Oprala 7ded18c
*** ../bash-4.2.47/builtins/evalstring.c	2010-11-23 08:22:15.000000000 -0500
Ondrej Oprala 7ded18c
--- builtins/evalstring.c	2014-09-16 19:35:45.000000000 -0400
Ondrej Oprala 7ded18c
***************
Ondrej Oprala 7ded18c
*** 262,265 ****
Ondrej Oprala 7ded18c
--- 262,273 ----
Ondrej Oprala 7ded18c
  	      struct fd_bitmap *bitmap;
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
+ 	      if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
Ondrej Oprala 7ded18c
+ 		{
Ondrej Oprala 7ded18c
+ 		  internal_warning ("%s: ignoring function definition attempt", from_file);
Ondrej Oprala 7ded18c
+ 		  should_jump_to_top_level = 0;
Ondrej Oprala 7ded18c
+ 		  last_result = last_command_exit_value = EX_BADUSAGE;
Ondrej Oprala 7ded18c
+ 		  break;
Ondrej Oprala 7ded18c
+ 		}
Ondrej Oprala 7ded18c
+ 
Ondrej Oprala 7ded18c
  	      bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
Ondrej Oprala 7ded18c
  	      begin_unwind_frame ("pe_dispose");
Ondrej Oprala 7ded18c
***************
Ondrej Oprala 7ded18c
*** 322,325 ****
Ondrej Oprala 7ded18c
--- 330,336 ----
Ondrej Oprala 7ded18c
  	      dispose_fd_bitmap (bitmap);
Ondrej Oprala 7ded18c
  	      discard_unwind_frame ("pe_dispose");
Ondrej Oprala 7ded18c
+ 
Ondrej Oprala 7ded18c
+ 	      if (flags & SEVAL_ONECMD)
Ondrej Oprala 7ded18c
+ 		break;
Ondrej Oprala 7ded18c
  	    }
Ondrej Oprala 7ded18c
  	}
Ondrej Oprala 7ded18c
*** ../bash-4.2.47/variables.c	2011-03-01 16:15:20.000000000 -0500
Ondrej Oprala 7ded18c
--- variables.c	2014-09-16 19:35:45.000000000 -0400
Ondrej Oprala 7ded18c
***************
Ondrej Oprala 7ded18c
*** 348,357 ****
Ondrej Oprala 7ded18c
  	  strcpy (temp_string + char_index + 1, string);
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
! 	  parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
Ondrej Oprala 7ded18c
! 
Ondrej Oprala 7ded18c
! 	  /* Ancient backwards compatibility.  Old versions of bash exported
Ondrej Oprala 7ded18c
! 	     functions like name()=() {...} */
Ondrej Oprala 7ded18c
! 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
Ondrej Oprala 7ded18c
! 	    name[char_index - 2] = '\0';
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
  	  if (temp_var = find_function (name))
Ondrej Oprala 7ded18c
--- 348,355 ----
Ondrej Oprala 7ded18c
  	  strcpy (temp_string + char_index + 1, string);
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
! 	  /* Don't import function names that are invalid identifiers from the
Ondrej Oprala 7ded18c
! 	     environment. */
Ondrej Oprala 7ded18c
! 	  if (legal_identifier (name))
Ondrej Oprala 7ded18c
! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
Ondrej Oprala 7ded18c
  
Ondrej Oprala 7ded18c
  	  if (temp_var = find_function (name))
Ondrej Oprala 7ded18c
***************
Ondrej Oprala 7ded18c
*** 362,369 ****
Ondrej Oprala 7ded18c
  	  else
Ondrej Oprala 7ded18c
  	    report_error (_("error importing function definition for `%s'"), name);
Ondrej Oprala 7ded18c
- 
Ondrej Oprala 7ded18c
- 	  /* ( */
Ondrej Oprala 7ded18c
- 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
Ondrej Oprala 7ded18c
- 	    name[char_index - 2] = '(';		/* ) */
Ondrej Oprala 7ded18c
  	}
Ondrej Oprala 7ded18c
  #if defined (ARRAY_VARS)
Ondrej Oprala 7ded18c
--- 360,363 ----
Ondrej Oprala bcac4b8
*** ../bash-4.2-patched/patchlevel.h	Sat Jun 12 20:14:48 2010
Ondrej Oprala bcac4b8
--- patchlevel.h	Thu Feb 24 21:41:34 2011
Ondrej Oprala bcac4b8
***************
Ondrej Oprala bcac4b8
*** 26,30 ****
Ondrej Oprala bcac4b8
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala bcac4b8
  
Ondrej Oprala bcac4b8
! #define PATCHLEVEL 47
Ondrej Oprala bcac4b8
  
Ondrej Oprala bcac4b8
  #endif /* _PATCHLEVEL_H_ */
Ondrej Oprala bcac4b8
--- 26,30 ----
Ondrej Oprala bcac4b8
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala bcac4b8
  
Ondrej Oprala bcac4b8
! #define PATCHLEVEL 48
Ondrej Oprala bcac4b8
  
Ondrej Oprala bcac4b8
  #endif /* _PATCHLEVEL_H_ */