psss / rpms / bash

Forked from rpms/bash 6 years ago
Clone
Ondrej Oprala dfa339c
			     BASH PATCH REPORT
Ondrej Oprala dfa339c
			     =================
Ondrej Oprala dfa339c
Ondrej Oprala dfa339c
Bash-Release:	4.3
Ondrej Oprala dfa339c
Patch-ID:	bash43-025
Ondrej Oprala dfa339c
Ondrej Oprala dfa339c
Bug-Reported-by:	Stephane Chazelas <stephane.chazelas@gmail.com>
Ondrej Oprala dfa339c
Bug-Reference-ID:
Ondrej Oprala dfa339c
Bug-Reference-URL:
Ondrej Oprala dfa339c
Ondrej Oprala dfa339c
Bug-Description:
Ondrej Oprala dfa339c
Ondrej Oprala dfa339c
Under certain circumstances, bash will execute user code while processing the
Ondrej Oprala dfa339c
environment for exported function definitions.
Ondrej Oprala dfa339c
Ondrej Oprala dfa339c
Patch (apply with `patch -p0'):
Ondrej Oprala dfa339c
Ondrej Oprala 74d1c2e
*** ../bash-4.3-patched/builtins/common.h	2013-07-08 16:54:47.000000000 -0400
Ondrej Oprala 74d1c2e
--- builtins/common.h	2014-09-12 14:25:47.000000000 -0400
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 34,37 ****
Ondrej Oprala 74d1c2e
--- 49,54 ----
Ondrej Oprala 74d1c2e
  #define SEVAL_PARSEONLY	0x020
Ondrej Oprala 74d1c2e
  #define SEVAL_NOLONGJMP 0x040
Ondrej Oprala 74d1c2e
+ #define SEVAL_FUNCDEF	0x080		/* only allow function definitions */
Ondrej Oprala 74d1c2e
+ #define SEVAL_ONECMD	0x100		/* only allow a single command */
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
  /* Flags for describe_command, shared between type.def and command.def */
Ondrej Oprala 74d1c2e
*** ../bash-4.3-patched/builtins/evalstring.c	2014-02-11 09:42:10.000000000 -0500
Ondrej Oprala 74d1c2e
--- builtins/evalstring.c	2014-09-14 14:15:13.000000000 -0400
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 309,312 ****
Ondrej Oprala 74d1c2e
--- 313,324 ----
Ondrej Oprala 74d1c2e
  	      struct fd_bitmap *bitmap;
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
+ 	      if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
Ondrej Oprala 74d1c2e
+ 		{
Ondrej Oprala 74d1c2e
+ 		  internal_warning ("%s: ignoring function definition attempt", from_file);
Ondrej Oprala 74d1c2e
+ 		  should_jump_to_top_level = 0;
Ondrej Oprala 74d1c2e
+ 		  last_result = last_command_exit_value = EX_BADUSAGE;
Ondrej Oprala 74d1c2e
+ 		  break;
Ondrej Oprala 74d1c2e
+ 		}
Ondrej Oprala 74d1c2e
+ 
Ondrej Oprala 74d1c2e
  	      bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
Ondrej Oprala 74d1c2e
  	      begin_unwind_frame ("pe_dispose");
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 369,372 ****
Ondrej Oprala 74d1c2e
--- 381,387 ----
Ondrej Oprala 74d1c2e
  	      dispose_fd_bitmap (bitmap);
Ondrej Oprala 74d1c2e
  	      discard_unwind_frame ("pe_dispose");
Ondrej Oprala 74d1c2e
+ 
Ondrej Oprala 74d1c2e
+ 	      if (flags & SEVAL_ONECMD)
Ondrej Oprala 74d1c2e
+ 		break;
Ondrej Oprala 74d1c2e
  	    }
Ondrej Oprala 74d1c2e
  	}
Ondrej Oprala 74d1c2e
*** ../bash-4.3-patched/variables.c	2014-05-15 08:26:50.000000000 -0400
Ondrej Oprala 74d1c2e
--- variables.c	2014-09-14 14:23:35.000000000 -0400
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 359,369 ****
Ondrej Oprala 74d1c2e
  	  strcpy (temp_string + char_index + 1, string);
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
! 	  if (posixly_correct == 0 || legal_identifier (name))
Ondrej Oprala 74d1c2e
! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
Ondrej Oprala 74d1c2e
! 
Ondrej Oprala 74d1c2e
! 	  /* Ancient backwards compatibility.  Old versions of bash exported
Ondrej Oprala 74d1c2e
! 	     functions like name()=() {...} */
Ondrej Oprala 74d1c2e
! 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
Ondrej Oprala 74d1c2e
! 	    name[char_index - 2] = '\0';
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
  	  if (temp_var = find_function (name))
Ondrej Oprala 74d1c2e
--- 364,372 ----
Ondrej Oprala 74d1c2e
  	  strcpy (temp_string + char_index + 1, string);
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
! 	  /* Don't import function names that are invalid identifiers from the
Ondrej Oprala 74d1c2e
! 	     environment, though we still allow them to be defined as shell
Ondrej Oprala 74d1c2e
! 	     variables. */
Ondrej Oprala 74d1c2e
! 	  if (legal_identifier (name))
Ondrej Oprala 74d1c2e
! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
Ondrej Oprala 74d1c2e
  
Ondrej Oprala 74d1c2e
  	  if (temp_var = find_function (name))
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 382,389 ****
Ondrej Oprala 74d1c2e
  	      report_error (_("error importing function definition for `%s'"), name);
Ondrej Oprala 74d1c2e
  	    }
Ondrej Oprala 74d1c2e
- 
Ondrej Oprala 74d1c2e
- 	  /* ( */
Ondrej Oprala 74d1c2e
- 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
Ondrej Oprala 74d1c2e
- 	    name[char_index - 2] = '(';		/* ) */
Ondrej Oprala 74d1c2e
  	}
Ondrej Oprala 74d1c2e
  #if defined (ARRAY_VARS)
Ondrej Oprala 74d1c2e
--- 385,388 ----
Ondrej Oprala 74d1c2e
*** ../bash-4.3-patched/subst.c	2014-08-11 11:16:35.000000000 -0400
Ondrej Oprala 74d1c2e
--- subst.c	2014-09-12 15:31:04.000000000 -0400
Ondrej Oprala 74d1c2e
***************
Ondrej Oprala 74d1c2e
*** 8048,8052 ****
Ondrej Oprala 74d1c2e
  	  goto return0;
Ondrej Oprala 74d1c2e
  	}
Ondrej Oprala 74d1c2e
!       else if (var = find_variable_last_nameref (temp1))
Ondrej Oprala 74d1c2e
  	{
Ondrej Oprala 74d1c2e
  	  temp = nameref_cell (var);
Ondrej Oprala 74d1c2e
--- 8118,8124 ----
Ondrej Oprala 74d1c2e
  	  goto return0;
Ondrej Oprala 74d1c2e
  	}
Ondrej Oprala 74d1c2e
!       else if (var && (invisible_p (var) || var_isset (var) == 0))
Ondrej Oprala 74d1c2e
! 	temp = (char *)NULL;
Ondrej Oprala 74d1c2e
!       else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
Ondrej Oprala 74d1c2e
  	{
Ondrej Oprala 74d1c2e
  	  temp = nameref_cell (var);
Ondrej Oprala dfa339c
*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
Ondrej Oprala dfa339c
--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
Ondrej Oprala dfa339c
***************
Ondrej Oprala dfa339c
*** 26,30 ****
Ondrej Oprala dfa339c
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala dfa339c
  
Ondrej Oprala dfa339c
! #define PATCHLEVEL 24
Ondrej Oprala dfa339c
  
Ondrej Oprala dfa339c
  #endif /* _PATCHLEVEL_H_ */
Ondrej Oprala dfa339c
--- 26,30 ----
Ondrej Oprala dfa339c
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala dfa339c
  
Ondrej Oprala dfa339c
! #define PATCHLEVEL 25
Ondrej Oprala dfa339c
  
Ondrej Oprala dfa339c
  #endif /* _PATCHLEVEL_H_ */