Page MenuHomeSolus

D7610.id18242.diff
No OneTemporary

D7610.id18242.diff

diff --git a/files/bash50-008 b/files/bash50-008
new file mode 100644
--- /dev/null
+++ b/files/bash50-008
@@ -0,0 +1,68 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-008
+
+Bug-Reported-by: Michael Albinus <michael.albinus@gmx.de>
+Bug-Reference-ID: <87bm36k3kz.fsf@gmx.de>
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00111.html
+
+Bug-Description:
+
+When HISTSIZE is set to 0, history expansion can leave the history length
+set to an incorrect value, leading to subsequent attempts to access invalid
+memory.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400
+--- bashhist.c 2019-02-20 16:20:04.000000000 -0500
+***************
+*** 561,573 ****
+ if (!history_expansion_inhibited && history_expansion && history_expansion_p (line))
+ {
+ /* If we are expanding the second or later line of a multi-line
+ command, decrease history_length so references to history expansions
+ in these lines refer to the previous history entry and not the
+ current command. */
+ if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+ history_length--;
+ expanded = history_expand (line, &history_value);
+ if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+! history_length++;
+
+ if (expanded)
+--- 561,576 ----
+ if (!history_expansion_inhibited && history_expansion && history_expansion_p (line))
+ {
++ int old_len;
++
+ /* If we are expanding the second or later line of a multi-line
+ command, decrease history_length so references to history expansions
+ in these lines refer to the previous history entry and not the
+ current command. */
++ old_len = history_length;
+ if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+ history_length--;
+ expanded = history_expand (line, &history_value);
+ if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+! history_length = old_len;
+
+ if (expanded)
+
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 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_ */
diff --git a/files/bash50-009 b/files/bash50-009
new file mode 100644
--- /dev/null
+++ b/files/bash50-009
@@ -0,0 +1,42 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-009
+
+Bug-Reported-by: chet.ramey@case.edu
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+The history file reading code doesn't close the file descriptor open to
+the history file when it encounters a zero-length file.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400
+--- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400
+***************
+*** 306,309 ****
+--- 312,316 ----
+ {
+ free (input);
++ close (file);
+ return 0; /* don't waste time if we don't have to */
+ }
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 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_ */
diff --git a/files/bash50-010 b/files/bash50-010
new file mode 100644
--- /dev/null
+++ b/files/bash50-010
@@ -0,0 +1,172 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-010
+
+Bug-Reported-by: Thorsten Glaser <tg@mirbsd.de>
+Bug-Reference-ID: <156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de>
+Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115
+
+Bug-Description:
+
+Bash-5.0 changed the way assignment statements preceding special builtins
+and shell functions were handled in posix mode. They automatically created
+or modified global variables instead of modifying existing local variables
+as in bash-4.4.
+
+The bash-4.4 posix-mode semantics were buggy, and resulted in creating
+local variables where they were not intended and modifying global variables
+and local variables simultaneously.
+
+The bash-5.0 changes were intended to fix this issue, but did not preserve
+enough backwards compatibility. The posix standard also changed what it
+required in these cases, so bash-5.0 is not bound by the strict conformance
+requirements that existed in previous issues of the standard.
+
+This patch modifies the bash-5.0 posix mode behavior in an effort to restore
+some backwards compatibility and rationalize the behavior in the presence of
+local variables. It
+
+1. Changes the assignment semantics to be more similar to standalone assignment
+ statements: assignments preceding a function call or special builtin while
+ executing in a shell function will modify the value of a local variable
+ with the same name for the duration of the function's execution;
+
+2. Changes assignments preceding shell function calls or special builtins
+ from within a shell function to no longer create or modify global variables
+ in the presence of a local variable with the same name;
+
+3. Assignment statements preceding a shell function call or special builtin
+ at the global scope continue to modify the (global) calling environment,
+ but are unaffected by assignments preceding function calls or special
+ builtins within a function, as described in item 2. This is also similar
+ to the behavior of a standalone assignment statement.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500
+--- variables.c 2019-08-22 10:53:44.000000000 -0400
+***************
+*** 4461,4467 ****
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a global variable from it. This
+! is called from merge_temporary_env, which is only called when in posix
+! mode. */
+ static void
+ push_posix_temp_var (data)
+--- 4461,4467 ----
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a variable from it as if a
+! standalone assignment statement had been performed. This is called from
+! merge_temporary_env, which is only called when in posix mode. */
+ static void
+ push_posix_temp_var (data)
+***************
+*** 4473,4486 ****
+ var = (SHELL_VAR *)data;
+
+! binding_table = global_variables->table;
+! if (binding_table == 0)
+! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS);
+!
+! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP);
+
+ /* global variables are no longer temporary and don't need propagating. */
+! var->attributes &= ~(att_tempvar|att_propagate);
+ if (v)
+! v->attributes |= var->attributes;
+
+ if (find_special_var (var->name) >= 0)
+--- 4473,4497 ----
+ var = (SHELL_VAR *)data;
+
+! /* Just like do_assignment_internal(). This makes assignments preceding
+! special builtins act like standalone assignment statements when in
+! posix mode, satisfying the posix requirement that this affect the
+! "current execution environment." */
+! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP);
+!
+! /* If this modifies an existing local variable, v->context will be non-zero.
+! If it comes back with v->context == 0, we bound at the global context.
+! Set binding_table appropriately. It doesn't matter whether it's correct
+! if the variable is local, only that it's not global_variables->table */
+! binding_table = v->context ? shell_variables->table : global_variables->table;
+
+ /* global variables are no longer temporary and don't need propagating. */
+! if (binding_table == global_variables->table)
+! var->attributes &= ~(att_tempvar|att_propagate);
+!
+ if (v)
+! {
+! v->attributes |= var->attributes;
+! v->attributes &= ~att_tempvar; /* not a temp var now */
+! }
+
+ if (find_special_var (var->name) >= 0)
+***************
+*** 4576,4587 ****
+ {
+ int i;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! hash_flush (temporary_env, pushf);
+! hash_dispose (temporary_env);
+ temporary_env = (HASH_TABLE *)NULL;
+
+ tempvar_list[tvlist_ind] = 0;
+
+--- 4587,4601 ----
+ {
+ int i;
++ HASH_TABLE *disposer;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! disposer = temporary_env;
+ temporary_env = (HASH_TABLE *)NULL;
+
++ hash_flush (disposer, pushf);
++ hash_dispose (disposer);
++
+ tempvar_list[tvlist_ind] = 0;
+
+*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500
+--- tests/varenv.right 2019-08-22 16:05:25.000000000 -0400
+***************
+*** 147,153 ****
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -x var="value"
+! inside: declare -- var="local"
+! outside: declare -x var="global"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+--- 147,153 ----
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -- var="outside"
+! inside: declare -x var="global"
+! outside: declare -- var="outside"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 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_ */
diff --git a/files/bash50-011 b/files/bash50-011
new file mode 100644
--- /dev/null
+++ b/files/bash50-011
@@ -0,0 +1,59 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-011
+
+Bug-Reported-by: Matt Whitlock
+Bug-Reference-ID:
+Bug-Reference-URL: https://savannah.gnu.org/support/?109671
+
+Bug-Description:
+
+The conditional command did not perform appropriate quoted null character
+removal on its arguments, causing syntax errors and attempts to stat
+invalid pathnames.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500
+--- subst.c 2019-04-14 13:25:41.000000000 -0400
+***************
+*** 3626,3630 ****
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. */
+ char *
+ cond_expand_word (w, special)
+--- 3642,3648 ----
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. In
+! any case, since we don't perform word splitting, we need to do quoted
+! null character removal. */
+ char *
+ cond_expand_word (w, special)
+***************
+*** 3647,3650 ****
+--- 3665,3670 ----
+ if (special == 0) /* LHS */
+ {
++ if (l->word)
++ word_list_remove_quoted_nulls (l);
+ dequote_list (l);
+ r = string_list (l);
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 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_ */
diff --git a/files/series b/files/series
--- a/files/series
+++ b/files/series
@@ -5,5 +5,9 @@
bash50-005 -p0
bash50-006 -p0
bash50-007 -p0
+bash50-008 -p0
+bash50-009 -p0
+bash50-010 -p0
+bash50-011 -p0
0001-Use-a-stateless-profile-by-default.patch
nodlopen.patch
diff --git a/package.yml b/package.yml
--- a/package.yml
+++ b/package.yml
@@ -1,6 +1,6 @@
name : bash
-version : 5.0.7
-release : 53
+version : 5.0.11
+release : 54
source :
- https://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz : b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d
license :
diff --git a/pspec_x86_64.xml b/pspec_x86_64.xml
--- a/pspec_x86_64.xml
+++ b/pspec_x86_64.xml
@@ -91,19 +91,20 @@
</Description>
<PartOf>system.boot</PartOf>
<RuntimeDependencies>
- <Dependency releaseFrom="53">bash</Dependency>
+ <Dependency releaseFrom="54">bash</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="executable">/bin/bash.recovery</Path>
</Files>
</Package>
<History>
- <Update release="53">
- <Date>2019-04-23</Date>
- <Version>5.0.7</Version>
+ <Update release="54">
+ <Date>2019-11-10</Date>
+ <Version>5.0.11</Version>
<Comment>Packaging update</Comment>
<Name>Alexander J. Koskovich</Name>
<Email>zvnexus@outlook.com</Email>
</Update>
</History>
-</PISI>
\ No newline at end of file
+</PISI>
+

File Metadata

Mime Type
text/plain
Expires
Thu, Aug 10, 8:03 PM (1 d, 4 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5810700
Default Alt Text
D7610.id18242.diff (14 KB)

Event Timeline