diff options
Diffstat (limited to 'debian/patches/bash43-025.diff')
-rw-r--r-- | debian/patches/bash43-025.diff | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/debian/patches/bash43-025.diff b/debian/patches/bash43-025.diff new file mode 100644 index 0000000..6a6ff7b --- /dev/null +++ b/debian/patches/bash43-025.diff @@ -0,0 +1,119 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-025 + +Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com> +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under certain circumstances, bash will execute user code while processing the +environment for exported function definitions. + + +Index: bash-4.3/builtins/common.h +=================================================================== +--- bash-4.3.orig/builtins/common.h 2013-07-08 22:54:47.000000000 +0200 ++++ bash-4.3/builtins/common.h 2014-09-24 20:37:05.016459862 +0200 +@@ -33,6 +33,8 @@ + #define SEVAL_RESETLINE 0x010 + #define SEVAL_PARSEONLY 0x020 + #define SEVAL_NOLONGJMP 0x040 ++#define SEVAL_FUNCDEF 0x080 /* only allow function definitions */ ++#define SEVAL_ONECMD 0x100 /* only allow a single command */ + + /* Flags for describe_command, shared between type.def and command.def */ + #define CDESC_ALL 0x001 /* type -a */ +Index: bash-4.3/builtins/evalstring.c +=================================================================== +--- bash-4.3.orig/builtins/evalstring.c 2014-02-11 15:42:10.000000000 +0100 ++++ bash-4.3/builtins/evalstring.c 2014-09-24 20:37:05.016459862 +0200 +@@ -308,6 +308,14 @@ + { + struct fd_bitmap *bitmap; + ++ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) ++ { ++ internal_warning ("%s: ignoring function definition attempt", from_file); ++ should_jump_to_top_level = 0; ++ last_result = last_command_exit_value = EX_BADUSAGE; ++ break; ++ } ++ + bitmap = new_fd_bitmap (FD_BITMAP_SIZE); + begin_unwind_frame ("pe_dispose"); + add_unwind_protect (dispose_fd_bitmap, bitmap); +@@ -368,6 +376,9 @@ + dispose_command (command); + dispose_fd_bitmap (bitmap); + discard_unwind_frame ("pe_dispose"); ++ ++ if (flags & SEVAL_ONECMD) ++ break; + } + } + else +Index: bash-4.3/patchlevel.h +=================================================================== +--- bash-4.3.orig/patchlevel.h 2014-09-24 20:28:46.000000000 +0200 ++++ bash-4.3/patchlevel.h 2014-09-24 20:37:05.020459944 +0200 +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 24 ++#define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.3/subst.c +=================================================================== +--- bash-4.3.orig/subst.c 2014-09-24 20:28:46.000000000 +0200 ++++ bash-4.3/subst.c 2014-09-24 20:37:05.020459944 +0200 +@@ -8047,7 +8047,9 @@ + + goto return0; + } +- else if (var = find_variable_last_nameref (temp1)) ++ else if (var && (invisible_p (var) || var_isset (var) == 0)) ++ temp = (char *)NULL; ++ else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) + { + temp = nameref_cell (var); + #if defined (ARRAY_VARS) +Index: bash-4.3/variables.c +=================================================================== +--- bash-4.3.orig/variables.c 2014-09-24 20:28:46.000000000 +0200 ++++ bash-4.3/variables.c 2014-09-24 20:37:05.016459862 +0200 +@@ -358,13 +358,11 @@ + temp_string[char_index] = ' '; + strcpy (temp_string + char_index + 1, string); + +- if (posixly_correct == 0 || legal_identifier (name)) +- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST); +- +- /* Ancient backwards compatibility. Old versions of bash exported +- functions like name()=() {...} */ +- if (name[char_index - 1] == ')' && name[char_index - 2] == '(') +- name[char_index - 2] = '\0'; ++ /* Don't import function names that are invalid identifiers from the ++ environment, though we still allow them to be defined as shell ++ variables. */ ++ if (legal_identifier (name)) ++ parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); + + if (temp_var = find_function (name)) + { +@@ -381,10 +379,6 @@ + last_command_exit_value = 1; + report_error (_("error importing function definition for `%s'"), name); + } +- +- /* ( */ +- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0') +- name[char_index - 2] = '('; /* ) */ + } + #if defined (ARRAY_VARS) + # if ARRAY_EXPORT |