Hello community, here is the log from the commit of package bash for openSUSE:Factory checked in at 2019-09-20 14:45:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bash (Old) and /work/SRC/openSUSE:Factory/.bash.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bash" Fri Sep 20 14:45:28 2019 rev:157 rq:729452 version:5.0.11 Changes: -------- --- /work/SRC/openSUSE:Factory/bash/bash.changes 2019-09-07 11:23:56.466507308 +0200 +++ /work/SRC/openSUSE:Factory/.bash.new.7948/bash.changes 2019-09-20 14:45:34.106973713 +0200 @@ -1,0 +2,18 @@ +Mon Sep 9 08:06:54 UTC 2019 - Dr. Werner Fink <[email protected]> + +- Use new version scheme which now includes patch level as well +- Add official patch bash50-010 + * Change posix mode bahviour + * Remove patch assignment-preceding-builtin.patch +- Add official patch bash50-011 + The conditional command did not perform appropriate quoted null + character removal on its arguments, causing syntax errors and + attempts to stat invalid pathnames. + +------------------------------------------------------------------- +Wed Sep 4 09:08:53 UTC 2019 - Ludwig Nussel <[email protected]> + +- Avoid pulling in bash-doc into every installation. Instead of + recommeding it, supplement the documentation pattern. + +------------------------------------------------------------------- Old: ---- assignment-preceding-builtin.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bash.spec ++++++ --- /var/tmp/diff_new_pack.NcC1oe/_old 2019-09-20 14:45:37.206973096 +0200 +++ /var/tmp/diff_new_pack.NcC1oe/_new 2019-09-20 14:45:37.210973095 +0200 @@ -21,7 +21,9 @@ Name: bash %define bextend %nil -Version: 5.0 +%define bversion 5.0 +%define bpatchlvl 11 +Version: %{bversion}.%{bpatchlvl} Release: 0 Summary: The GNU Bourne-Again Shell License: GPL-3.0-or-later @@ -31,11 +33,11 @@ # bugs which will hit at most this package #Recommends: bash-completion Suggests: command-not-found -Recommends: bash-doc = %version +Suggests: bash-doc = %version Url: http://www.gnu.org/software/bash/bash.html # Git: http://git.savannah.gnu.org/cgit/bash.git -Source0: ftp://ftp.gnu.org/gnu/bash/bash-%{version}%{bextend}.tar.gz -Source1: bash-%{version}-patches.tar.bz2 +Source0: ftp://ftp.gnu.org/gnu/bash/bash-%{bversion}%{bextend}.tar.gz +Source1: bash-%{bversion}-patches.tar.bz2 Source4: run-tests Source5: dot.bashrc Source6: dot.profile @@ -46,7 +48,7 @@ # http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00071.html # http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00073.html Source9: bash-4.2-history-myown.dif.bz2 -Patch0: bash-%{version}.dif +Patch0: bash-%{bversion}.dif Patch1: bash-2.03-manual.patch Patch2: bash-4.0-security.patch Patch3: bash-4.3-2.4.4.patch @@ -72,8 +74,6 @@ Patch48: bash-4.3-extra-import-func.patch # PATCH-EXTEND-SUSE Allow root to clean file system if filled up Patch49: bash-4.3-pathtemp.patch -# PATCH-EXTEND-UPSTREAM bash-5.0: problem with variable scoping in posix-mode -Patch100: assignment-preceding-builtin.patch BuildRequires: audit-devel BuildRequires: autoconf BuildRequires: bison @@ -105,6 +105,7 @@ Summary: Documentation how to Use the GNU Bourne-Again Shell Group: Documentation/Man Provides: bash:%{_infodir}/bash.info.gz +Supplements: packageand(bash:patterns-base-documentation) PreReq: %install_info_prereq BuildArch: noarch @@ -198,9 +199,9 @@ %else echo -e '\033[1m\032[31mShift JIS support disabled\033[m' %endif -%setup -q -n bash-%{version}%{bextend} -b1 +%setup -q -n bash-%{bversion}%{bextend} -b1 typeset -i level -for patch in ../bash-%{version}-patches/*; do +for patch in ../bash-%{bversion}-patches/*; do test -e $patch || break let level=0 || true file=$(lsdiff --files=1 $patch) @@ -209,7 +210,7 @@ let level++ || true fi test -e $file || exit 1 - sed -ri '/^\*\*\* \.\./{ s@\.\./bash-%{version}[^/]*/@@ }' $patch + sed -ri '/^\*\*\* \.\./{ s@\.\./bash-%{bversion}[^/]*/@@ }' $patch echo Patch $patch patch -s -p$level < $patch done @@ -237,7 +238,6 @@ %patch48 -b .eif %endif %patch49 -p0 -b .pthtmp -%patch100 -p0 -b .posix %patch0 -p0 -b .0 # This has to be always the same version as included in the bash its self @@ -475,9 +475,9 @@ problems in geting the current cursor position within the readline runtime library: | -bash-%{version}> LANG=ja_JP -bash-%{version}> echo -n "Hello" -bash-%{version}> +bash-%{bversion}> LANG=ja_JP +bash-%{bversion}> echo -n "Hello" +bash-%{bversion}> | In other words the prompt overwrites the output of the echo comand. The boolean variable byte-oriented ++++++ bash-4.1-completion.dif ++++++ --- /var/tmp/diff_new_pack.NcC1oe/_old 2019-09-20 14:45:37.258973085 +0200 +++ /var/tmp/diff_new_pack.NcC1oe/_new 2019-09-20 14:45:37.258973085 +0200 @@ -4,7 +4,7 @@ --- bashline.c +++ bashline.c 2018-11-29 08:12:25.876588305 +0000 -@@ -2045,6 +2045,13 @@ globword: +@@ -2046,6 +2046,13 @@ globword: return ((char *)NULL); } ++++++ bash-5.0-patches.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-5.0-patches/bash50-008 new/bash-5.0-patches/bash50-008 --- old/bash-5.0-patches/bash50-008 2019-08-14 20:49:28.000000000 +0200 +++ new/bash-5.0-patches/bash50-008 2019-08-15 15:46:07.348536183 +0200 @@ -16,7 +16,7 @@ Patch (apply with `patch -p0'): -*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400 +*** bashhist.c 2018-07-05 22:41:14.000000000 -0400 --- bashhist.c 2019-02-20 16:20:04.000000000 -0500 *************** *** 561,573 **** @@ -51,7 +51,7 @@ if (expanded) -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +*** patchlevel.h 2016-06-22 14:51:03.000000000 -0400 --- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 *************** *** 26,30 **** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-5.0-patches/bash50-009 new/bash-5.0-patches/bash50-009 --- old/bash-5.0-patches/bash50-009 2019-08-14 20:49:39.000000000 +0200 +++ new/bash-5.0-patches/bash50-009 2019-08-15 15:46:07.360535961 +0200 @@ -15,7 +15,7 @@ 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 2018-06-11 09:14:52.000000000 -0400 --- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 *************** *** 306,309 **** @@ -25,7 +25,7 @@ + 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-06-22 14:51:03.000000000 -0400 --- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 *************** *** 26,30 **** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-5.0-patches/bash50-010 new/bash-5.0-patches/bash50-010 --- old/bash-5.0-patches/bash50-010 1970-01-01 01:00:00.000000000 +0100 +++ new/bash-5.0-patches/bash50-010 2019-08-29 17:10:00.000000000 +0200 @@ -0,0 +1,172 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-010 + +Bug-Reported-by: Thorsten Glaser <[email protected]> +Bug-Reference-ID: <156622962831.19438.16374961114836556294.report...@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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bash-5.0-patches/bash50-011 new/bash-5.0-patches/bash50-011 --- old/bash-5.0-patches/bash50-011 1970-01-01 01:00:00.000000000 +0100 +++ new/bash-5.0-patches/bash50-011 2019-08-29 17:10:10.000000000 +0200 @@ -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_ */
