# HG changeset patch # User Vladimir Marek # Date 1485429885 -3600 # Node ID 4758b76d5ad5fa1c69b28cf96cc82778f342f03f # Parent d89b1c5817f541a7ad637e2b3c8392d34870b85a 25123965 Update bash to version 4.4 24689447 problem in UTILITY/BASH 21341453 process hangs when terminated with unfinished command 21196056 bash test is failing to finish 19394218 bash : Parameter Substitution Causing Memory Leak diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/Makefile --- a/components/bash/Makefile Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/Makefile Thu Jan 26 12:24:45 2017 +0100 @@ -18,33 +18,40 @@ # # CDDL HEADER END # -# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + # +# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +# + include ../../make-rules/shared-macros.mk COMPONENT_NAME= bash -COMPONENT_VERSION= 4.1 +COMPONENT_VERSION= 4.4 COMPONENT_SRC= $(COMPONENT_NAME)-$(COMPONENT_VERSION) COMPONENT_PROJECT_URL= http://www.gnu.org/software/bash/ COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.gz -COMPONENT_ARCHIVE_HASH= \ - sha256:3f627124a83c6d34db503a923e20710d370573a29dd5d11d6f116d1aee7be1da +COMPONENT_ARCHIVE_HASH = \ + sha256:d86b3392c1202e8ff5a423b302e6284db7f8f435ea9f39b5b1b20fd3ac36dfcb COMPONENT_ARCHIVE_URL= http://ftp.gnu.org/gnu/bash/$(COMPONENT_ARCHIVE) COMPONENT_BUGDB= utility/bash -TPNO= 7265 +TPNO= 32706 include $(WS_MAKE_RULES)/prep.mk include $(WS_MAKE_RULES)/configure.mk include $(WS_MAKE_RULES)/ips.mk +# Avoid running configure again during the build due to patches to +# configure-related files by running autoconf before we run configure. +COMPONENT_PREP_ACTION += (cd $(@D); autoconf) + BASH_PATCHLEVEL=$(shell grep -h "define PATCHLEVEL" $(COMPONENT_DIR)/patches/bash* | nawk '{print $$NF}' | sort -n | tail -1) IPS_COMPONENT_VERSION = $(COMPONENT_VERSION).$(BASH_PATCHLEVEL) PATCH_LEVEL = 0 PKG_PROTO_DIRS += $(COMPONENT_DIR)/Solaris -# Enable C99 mode + -Xc for it's additional warnings. +# Enable C99 mode + -Xc for its additional warnings. studio_C99MODE = -Xc $(studio_C99_ENABLE) # Use the maximum number of registers on sparc since we have no libraries @@ -52,6 +59,7 @@ # 8 byte memory alignment + interpretation of non-alignment instead of SIGBUS studio_ALIGN.sparc.32 = -xmemalign=8i +studio_ALIGN.sparc.64 = -xmemalign=16i # -xinline=%auto -- we like inlining where appropriate CFLAGS += -xinline=%auto @@ -60,71 +68,84 @@ CFLAGS += -xbuiltin=%none CFLAGS += $(XPG6MODE) -CFLAGS += $(CPP_POSIX) CFLAGS += $(CPP_C99_EXTENDED_MATH) +CFLAGS += -I$(USRINCDIR)/ncurses # configure checks for some functions, but doesn't seem to want to link in # the required libraries for them. We avoid linking with libthread.so.1 # just because we pass -mt, by explicitly passing -lc. -LIBS = -lc -lsocket -lgen +LIBS = -lc -lgen +ifeq ($(OS_VERSION),5.11) +LIBS += -lsocket +endif # -z redlocsym -- let's shrink the SHT_SYMTAB as much as we can LDFLAGS = $(LD_Z_REDLOCSYM) -# The bash test harness needs the GNU userland utilities -TEST_PATH = "PATH=$(BUILD_DIR_64):$(GNUBIN):$(USRBINDIR)" -TEST_OUTPUT = $(COMPONENT_DIR)/bash_test_results_$(MACH).out - -CONFIGURE_ENV += CFLAGS="$(CFLAGS)" +# This avoids the need to patch configure or other files for these dependencies. +ifeq ($(OS_VERSION), 5.11) +CONFIGURE_ENV += LD_OPTIONS="-lc -lm -lgen -lsocket -lnsl -lresolv $(LD_Z_IGNORE)" +else +CONFIGURE_ENV += LD_OPTIONS="-lc -lm -lgen -lresolv $(LD_Z_IGNORE)" +endif CONFIGURE_ENV += LDFLAGS="$(LDFLAGS)" CONFIGURE_ENV += LIBS="$(LIBS)" -CONFIGURE_OPTIONS += --localstatedir=/var -CONFIGURE_OPTIONS += --enable-alias -CONFIGURE_OPTIONS += --enable-arith-for-command -CONFIGURE_OPTIONS += --enable-array-variables -CONFIGURE_OPTIONS += --enable-bang-history -CONFIGURE_OPTIONS += --enable-brace-expansion -CONFIGURE_OPTIONS += --enable-casemod-attributes -CONFIGURE_OPTIONS += --enable-casemod-expansions -CONFIGURE_OPTIONS += --enable-command-timing -CONFIGURE_OPTIONS += --enable-cond-command -CONFIGURE_OPTIONS += --enable-cond-regexp -CONFIGURE_OPTIONS += --enable-coprocesses -CONFIGURE_OPTIONS += --enable-debugger -CONFIGURE_OPTIONS += --enable-directory-stack -CONFIGURE_OPTIONS += --enable-disabled-builtins -CONFIGURE_OPTIONS += --enable-dparen-arithmetic -CONFIGURE_OPTIONS += --enable-extended-glob -CONFIGURE_OPTIONS += --enable-help-builtin -CONFIGURE_OPTIONS += --enable-history -CONFIGURE_OPTIONS += --enable-job-control -CONFIGURE_OPTIONS += --enable-multibyte -CONFIGURE_OPTIONS += --enable-net-redirections -CONFIGURE_OPTIONS += --enable-process-substitution -CONFIGURE_OPTIONS += --enable-progcomp -CONFIGURE_OPTIONS += --enable-prompt-string-decoding -CONFIGURE_OPTIONS += --enable-readline -CONFIGURE_OPTIONS += --enable-restricted -CONFIGURE_OPTIONS += --enable-select -CONFIGURE_OPTIONS += --enable-separate-helpfiles -CONFIGURE_OPTIONS += --enable-single-help-strings -CONFIGURE_OPTIONS += --disable-strict-posix-default -CONFIGURE_OPTIONS += --enable-usg-echo-default -CONFIGURE_OPTIONS += --enable-xpg-echo-default -CONFIGURE_OPTIONS += --enable-mem-scramble -CONFIGURE_OPTIONS += --disable-profiling -CONFIGURE_OPTIONS += --enable-static-link -CONFIGURE_OPTIONS += --enable-largefile -CONFIGURE_OPTIONS += --enable-nls -CONFIGURE_OPTIONS += --with-bash-malloc -CONFIGURE_OPTIONS += --with-curses -CONFIGURE_OPTIONS += --with-installed-readline=no -CONFIGURE_OPTIONS += --infodir=$(CONFIGURE_INFODIR) +# Ignore tgetent() checks in configure and use libncurses on Solaris. +CONFIGURE_ENV += ac_cv_func_tgetent=yes +CONFIGURE_ENV += ac_cv_lib_termcap_tgetent=no +CONFIGURE_ENV += ac_cv_lib_curses_tgetent=no +CONFIGURE_ENV += ac_cv_lib_ncurses_tgetent=yes +CONFIGURE_ENV += bash_cv_termcap_lib=libncurses -TEST_ENV += -i -TEST_ENV += $(TEST_PATH) -TEST_ENV += $(TARGET_ENV) +CONFIGURE_OPTIONS += --disable-profiling +CONFIGURE_OPTIONS += --disable-strict-posix-default +CONFIGURE_OPTIONS += --enable-alias +CONFIGURE_OPTIONS += --enable-arith-for-command +CONFIGURE_OPTIONS += --enable-array-variables +CONFIGURE_OPTIONS += --enable-bang-history +CONFIGURE_OPTIONS += --enable-brace-expansion +CONFIGURE_OPTIONS += --enable-casemod-attributes +CONFIGURE_OPTIONS += --enable-casemod-expansions +CONFIGURE_OPTIONS += --enable-command-timing +CONFIGURE_OPTIONS += --enable-cond-command +CONFIGURE_OPTIONS += --enable-cond-regexp +CONFIGURE_OPTIONS += --enable-coprocesses +CONFIGURE_OPTIONS += --enable-debugger +CONFIGURE_OPTIONS += --enable-directory-stack +CONFIGURE_OPTIONS += --enable-disabled-builtins +CONFIGURE_OPTIONS += --enable-dparen-arithmetic +CONFIGURE_OPTIONS += --enable-extended-glob +CONFIGURE_OPTIONS += --enable-help-builtin +CONFIGURE_OPTIONS += --enable-history +CONFIGURE_OPTIONS += --enable-job-control +CONFIGURE_OPTIONS += --enable-largefile +CONFIGURE_OPTIONS += --enable-mem-scramble +CONFIGURE_OPTIONS += --enable-multibyte +CONFIGURE_OPTIONS += --enable-net-redirections +CONFIGURE_OPTIONS += --enable-nls +CONFIGURE_OPTIONS += --enable-process-substitution +CONFIGURE_OPTIONS += --enable-progcomp +CONFIGURE_OPTIONS += --enable-prompt-string-decoding +CONFIGURE_OPTIONS += --enable-readline +CONFIGURE_OPTIONS += --enable-restricted +CONFIGURE_OPTIONS += --enable-select +CONFIGURE_OPTIONS += --enable-separate-helpfiles +CONFIGURE_OPTIONS += --enable-single-help-strings +CONFIGURE_OPTIONS += --enable-static-link +CONFIGURE_OPTIONS += --enable-usg-echo-default=yes +CONFIGURE_OPTIONS += --enable-xpg-echo-default=yes +CONFIGURE_OPTIONS += --infodir=$(CONFIGURE_INFODIR) +CONFIGURE_OPTIONS += --localstatedir=/var +CONFIGURE_OPTIONS += --with-bash-malloc=yes +CONFIGURE_OPTIONS += --with-curses +CONFIGURE_OPTIONS += --with-installed-readline=no + +COMPONENT_TEST_DIR = $(BUILD_DIR_64) +COMPONENT_TEST_ENV = - $(TEST_PATH) +# The bash test harness needs the GNU userland utilities +TEST_PATH = "PATH=$(GNUBIN):$(USRBINDIR)" + ASLR_MODE=$(ASLR_ENABLE) @@ -139,6 +160,6 @@ test: $(TEST_64) - +REQUIRED_PACKAGES += library/ncurses REQUIRED_PACKAGES += shell/ksh93 REQUIRED_PACKAGES += system/library diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/TESTING --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/TESTING Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,10 @@ +Bash test results are stored in test/*/test-64-results. They are then filtered +by COMPONENT_TEST_TRANSFORMS to make the test produce stable/reproducible +results. Unfortunatelly COMPONENT_TEST_TRANSFORMS remove any problems +encountered too. This is not ideal and should be fixed. The problem is that +bash tests are sensitive to environment they are executed in (your ~/.bash* +files for example). It's not easy to tell that bash tests finished +successfully, you have to read it through. + +To compare the results before and after a fix one has to store test-64-results +file and compare it to the one generated after your change. diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/bash.license --- a/components/bash/bash.license Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/bash.license Thu Jan 26 12:24:45 2017 +0100 @@ -1125,3 +1125,4 @@ recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. + diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/bash.p5m --- a/components/bash/bash.p5m Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/bash.p5m Thu Jan 26 12:24:45 2017 +0100 @@ -18,7 +18,7 @@ # # CDDL HEADER END # -# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # default mangler.man.stability volatile> @@ -30,7 +30,7 @@ set name=info.classification value=org.opensolaris.category.2008:System/Shells set name=info.source-url value=$(COMPONENT_ARCHIVE_URL) set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) -set name=org.opensolaris.arc-caseid value=PSARC/1999/555 +set name=org.opensolaris.arc-caseid value=PSARC/2000/488 set name=org.opensolaris.consolidation value=$(CONSOLIDATION) # dir path=etc @@ -51,6 +51,7 @@ dir path=usr/gnu dir path=usr/gnu/bin link path=usr/gnu/bin/sh target=../../bin/bash +# dir path=usr/share dir path=usr/share/bash file path=usr/share/bash/alias @@ -129,6 +130,7 @@ file path=usr/share/bash/variable_help file path=usr/share/bash/wait file path=usr/share/bash/while +# dir path=usr/share/info file path=usr/share/info/bash.info dir path=usr/share/locale @@ -144,13 +146,23 @@ dir path=usr/share/locale/cs dir path=usr/share/locale/cs/LC_MESSAGES file path=usr/share/locale/cs/LC_MESSAGES/bash.mo +dir path=usr/share/locale/da +dir path=usr/share/locale/da/LC_MESSAGES +file path=usr/share/locale/da/LC_MESSAGES/bash.mo dir path=usr/share/locale/de dir path=usr/share/locale/de/LC_MESSAGES file path=usr/share/locale/de/LC_MESSAGES/bash.mo +dir path=usr/share/locale/el +dir path=usr/share/locale/el/LC_MESSAGES +file path=usr/share/locale/el/LC_MESSAGES/bash.mo dir path=usr/share/locale/en dir path=usr/share/locale/en/LC_MESSAGES file path=usr/share/locale/en/LC_MESSAGES/bash.mo +dir path=usr/share/locale/en@boldquot +dir path=usr/share/locale/en@boldquot/LC_MESSAGES file path=usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo +dir path=usr/share/locale/en@quot +dir path=usr/share/locale/en@quot/LC_MESSAGES file path=usr/share/locale/en@quot/LC_MESSAGES/bash.mo dir path=usr/share/locale/en_CA dir path=usr/share/locale/en_CA/LC_MESSAGES @@ -167,21 +179,39 @@ dir path=usr/share/locale/et dir path=usr/share/locale/et/LC_MESSAGES file path=usr/share/locale/et/LC_MESSAGES/bash.mo +dir path=usr/share/locale/fi +dir path=usr/share/locale/fi/LC_MESSAGES +file path=usr/share/locale/fi/LC_MESSAGES/bash.mo dir path=usr/share/locale/fr dir path=usr/share/locale/fr/LC_MESSAGES file path=usr/share/locale/fr/LC_MESSAGES/bash.mo +dir path=usr/share/locale/ga +dir path=usr/share/locale/ga/LC_MESSAGES +file path=usr/share/locale/ga/LC_MESSAGES/bash.mo +dir path=usr/share/locale/gl +dir path=usr/share/locale/gl/LC_MESSAGES +file path=usr/share/locale/gl/LC_MESSAGES/bash.mo +dir path=usr/share/locale/hr +dir path=usr/share/locale/hr/LC_MESSAGES +file path=usr/share/locale/hr/LC_MESSAGES/bash.mo dir path=usr/share/locale/hu dir path=usr/share/locale/hu/LC_MESSAGES file path=usr/share/locale/hu/LC_MESSAGES/bash.mo dir path=usr/share/locale/id dir path=usr/share/locale/id/LC_MESSAGES file path=usr/share/locale/id/LC_MESSAGES/bash.mo +dir path=usr/share/locale/it +dir path=usr/share/locale/it/LC_MESSAGES +file path=usr/share/locale/it/LC_MESSAGES/bash.mo dir path=usr/share/locale/ja dir path=usr/share/locale/ja/LC_MESSAGES file path=usr/share/locale/ja/LC_MESSAGES/bash.mo dir path=usr/share/locale/lt dir path=usr/share/locale/lt/LC_MESSAGES file path=usr/share/locale/lt/LC_MESSAGES/bash.mo +dir path=usr/share/locale/nb +dir path=usr/share/locale/nb/LC_MESSAGES +file path=usr/share/locale/nb/LC_MESSAGES/bash.mo dir path=usr/share/locale/nl dir path=usr/share/locale/nl/LC_MESSAGES file path=usr/share/locale/nl/LC_MESSAGES/bash.mo @@ -200,26 +230,42 @@ dir path=usr/share/locale/sk dir path=usr/share/locale/sk/LC_MESSAGES file path=usr/share/locale/sk/LC_MESSAGES/bash.mo +dir path=usr/share/locale/sl +dir path=usr/share/locale/sl/LC_MESSAGES +file path=usr/share/locale/sl/LC_MESSAGES/bash.mo +dir path=usr/share/locale/sr +dir path=usr/share/locale/sr/LC_MESSAGES +file path=usr/share/locale/sr/LC_MESSAGES/bash.mo dir path=usr/share/locale/sv dir path=usr/share/locale/sv/LC_MESSAGES file path=usr/share/locale/sv/LC_MESSAGES/bash.mo dir path=usr/share/locale/tr dir path=usr/share/locale/tr/LC_MESSAGES file path=usr/share/locale/tr/LC_MESSAGES/bash.mo +dir path=usr/share/locale/uk +dir path=usr/share/locale/uk/LC_MESSAGES +file path=usr/share/locale/uk/LC_MESSAGES/bash.mo dir path=usr/share/locale/vi dir path=usr/share/locale/vi/LC_MESSAGES file path=usr/share/locale/vi/LC_MESSAGES/bash.mo +dir path=usr/share/locale/zh_CN +dir path=usr/share/locale/zh_CN/LC_MESSAGES +file path=usr/share/locale/zh_CN/LC_MESSAGES/bash.mo dir path=usr/share/locale/zh_TW dir path=usr/share/locale/zh_TW/LC_MESSAGES file path=usr/share/locale/zh_TW/LC_MESSAGES/bash.mo +# dir path=usr/share/man dir path=usr/share/man/man1 file path=usr/share/man/man1/bash.1 file path=usr/share/man/man1/bashbug.1 file rbash.1 path=usr/share/man/man1/rbash.1 # -legacy pkg=SUNWbash desc="GNU Bourne-Again shell (bash)" \ +legacy pkg=SUNWbash desc="GNU Bourne-Again shell (bash) version 4.2" \ name="GNU Bourne-Again shell (bash)" +legacy pkg=SUNWbashr \ + desc="GNU Bourne-Again shell (bash) version 4.2 (root package)" \ + name="GNU Bourne-Again shell (bash) (root)" # license bash.license license="GPLv3, FDLv1.3" diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-001.patch --- a/components/bash/patches/bash41-001.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-001 - -Bug-Reported-by: Yann Rouillard -Bug-Reference-ID: <4B44A410.4070107@pleiades.fr.eu.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00018.html - -Bug-Description: - -A prototype for vsnprintf was incorrect, and caused compilation failures -on systems that did not have a suitable vsnprintf, but had a declaration in -one of the system header files. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/builtins/printf.def 2009-11-20 15:31:23.000000000 -0500 ---- builtins/printf.def 2010-01-07 08:50:06.000000000 -0500 -*************** -*** 173,177 **** - - #if !HAVE_VSNPRINTF -! extern int vsnprintf __P((char *, size_t, const char *, ...)) __attribute__((__format__ (printf, 3, 4))); - #endif - ---- 173,177 ---- - - #if !HAVE_VSNPRINTF -! extern int vsnprintf __P((char *, size_t, const char *, va_list)) __attribute__((__format__ (printf, 3, 0))); - #endif - -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 0 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-002.patch --- a/components/bash/patches/bash41-002.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-002 - -Bug-Reported-by: guillaume.outters@free.fr -Bug-Reference-ID: <20100105230441.70D171AA7F52@asterix.local> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00017.html - -Bug-Description: - -Bash-4.1/Readline-6.1 introduced a hook function that allows applications -to rewrite or modify filenames read from the file system before comparing -them with a word to be completed. The converted filename, if it matches, -needs to be inserted into the line buffer, replacing the original contents. - -This fixes a completion bug on Mac OS X involving filenames containing -UTF-8 characters. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/lib/readline/complete.c 2009-11-29 18:39:30.000000000 -0500 ---- lib/readline/complete.c 2010-01-06 08:30:23.000000000 -0500 -*************** -*** 2139,2143 **** - if (filename_len == 0) - { -! if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name)) - continue; - ---- 2139,2143 ---- - if (filename_len == 0) - { -! if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) - continue; - -*************** -*** 2220,2224 **** - } - -! strcpy (temp + dirlen, entry->d_name); - } - else ---- 2220,2224 ---- - } - -! strcpy (temp + dirlen, convfn); - } - else -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-003.patch --- a/components/bash/patches/bash41-003.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-003 - -Bug-Reported-by: coyote@wariat.org.pl -Bug-Reference-ID: <4b64a1f8.06e2660a.60af.4bfb@mx.google.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-01/msg00135.html - -Bug-Description: - -If command completion is attempted on a word with a quoted globbing -character (e.g., `*' or `?'), bash can reference a NULL pointer and -dump core. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/bashline.c 2009-10-24 14:10:19.000000000 -0400 ---- bashline.c 2010-01-30 21:53:49.000000000 -0500 -*************** -*** 1681,1685 **** - characters in the common prefix are bad) will ever be returned on - regular completion. */ -! if (glob_pattern_p (hint)) - { - if (state == 0) ---- 1681,1685 ---- - characters in the common prefix are bad) will ever be returned on - regular completion. */ -! if (globpat) - { - if (state == 0) -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-004.patch --- a/components/bash/patches/bash41-004.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-004 - -Bug-Reported-by: Crestez Dan Leonard -Bug-Reference-ID: <1265592839.30682.21.camel@deskbox> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00034.html - -Bug-Description: - -When running in Posix mode and executing a shell function without local -variables, bash will not propagate a variable in a special builtin's temporary -environment to have global scope. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/variables.c 2009-11-03 14:13:58.000000000 -0500 ---- variables.c 2010-02-08 17:36:18.000000000 -0500 -*************** -*** 3809,3812 **** ---- 3809,3817 ---- - if (tempvar_p (var) && (posixly_correct || (var->attributes & att_propagate))) - { -+ /* Make sure we have a hash table to store the variable in while it is -+ being propagated down to the global variables table. Create one if -+ we have to */ -+ if ((vc_isfuncenv (shell_variables) || vc_istempenv (shell_variables)) && shell_variables->table == 0) -+ shell_variables->table = hash_create (0); - /* XXX - should we set v->context here? */ - v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0); -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-005.patch --- a/components/bash/patches/bash41-005.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-005 - -Bug-Reported-by: werner@suse.de -Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html - -Bug-Description: - -When the `read' builtin times out after the timeout specified with -t is -exceeded, it does not reset the flags that tell signal handlers to process -signals immediately instead of deferring their handling. This can result -in unsafe functions being called from signal handlers, which can cause bash -to hang or dump core. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/builtins/read.def 2009-10-08 11:35:46.000000000 -0400 ---- builtins/read.def 2010-03-17 17:35:39.000000000 -0400 -*************** -*** 616,621 **** - zsyncfd (fd); - -- interrupt_immediately--; -- terminate_immediately--; - discard_unwind_frame ("read_builtin"); - ---- 616,619 ---- -*************** -*** 624,627 **** ---- 622,628 ---- - assign_vars: - -+ interrupt_immediately--; -+ terminate_immediately--; -+ - #if defined (ARRAY_VARS) - /* If -a was given, take the string read, break it into a list of words, -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-006.patch --- a/components/bash/patches/bash41-006.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-006 - -Bug-Reported-by: Mike Frysinger -Bug-Reference-ID: <201003210155.56618.vapier@gentoo.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00063.html - -Bug-Description: - -Bash did not correctly print/reproduce here documents attached to commands -inside compound commands such as for and while. This affected the -execution of such commands inside a shell function when the function -definition is saved and later restored using `.' or `eval'. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/print_cmd.c 2009-09-16 15:32:26.000000000 -0400 ---- print_cmd.c 2010-03-22 21:15:30.000000000 -0400 -*************** -*** 114,117 **** ---- 114,123 ---- - #define CHECK_XTRACE_FP xtrace_fp = (xtrace_fp ? xtrace_fp : stderr) - -+ #define PRINT_DEFERRED_HEREDOCS(x) \ -+ do { \ -+ if (deferred_heredocs) \ -+ print_deferred_heredocs (x); \ -+ } while (0) -+ - /* Non-zero means the stuff being printed is inside of a function def. */ - static int inside_function_def; -*************** -*** 561,571 **** - { - print_for_command_head (for_command); -- - cprintf (";"); - newline ("do\n"); - indentation += indentation_amount; - make_command_string_internal (for_command->action); - semicolon (); - indentation -= indentation_amount; - newline ("done"); - } ---- 566,578 ---- - { - print_for_command_head (for_command); - cprintf (";"); - newline ("do\n"); -+ - indentation += indentation_amount; - make_command_string_internal (for_command->action); -+ PRINT_DEFERRED_HEREDOCS (""); - semicolon (); - indentation -= indentation_amount; -+ - newline ("done"); - } -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-007.patch --- a/components/bash/patches/bash41-007.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-007 - -Bug-Reported-by: Rob Robason -Bug-Reference-ID: <1269513145.22336.9.camel@home.robason.homelinux.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00089.html - -Bug-Description: - -A typo caused bash to not honor a precision specification in a printf -format. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/builtins/printf.def 2010-01-18 10:50:22.000000000 -0500 ---- builtins/printf.def 2010-03-25 09:40:56.000000000 -0400 -*************** -*** 118,122 **** - nw = vflag ? vbprintf (f, fieldwidth, func) : printf (f, fieldwidth, func); \ - else if (have_precision) \ -! nw = vflag ? vbprintf (f, precision, func) : printf (f, fieldwidth, func); \ - else \ - nw = vflag ? vbprintf (f, func) : printf (f, func); \ ---- 118,122 ---- - nw = vflag ? vbprintf (f, fieldwidth, func) : printf (f, fieldwidth, func); \ - else if (have_precision) \ -! nw = vflag ? vbprintf (f, precision, func) : printf (f, precision, func); \ - else \ - nw = vflag ? vbprintf (f, func) : printf (f, func); \ -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-008.patch --- a/components/bash/patches/bash41-008.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-008 - -Bug-Reported-by: Dennis van Dok -Bug-Reference-ID: <4BBF2501.5050703@gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-04/msg00038.html - -Bug-Description: - -When declaring an associative array and implicitly assigning a value -to element "0", bash does not correctly allocate memory, leading to -a segmentation violation when that element or the array itself is -unset. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/builtins/declare.def 2009-11-25 19:42:00.000000000 -0500 ---- builtins/declare.def 2010-05-30 18:25:21.000000000 -0400 -*************** -*** 513,517 **** - /* let bind_{array,assoc}_variable take care of this. */ - if (assoc_p (var)) -! bind_assoc_variable (var, name, "0", value, aflags); - else - bind_array_variable (name, 0, value, aflags); ---- 519,523 ---- - /* let bind_{array,assoc}_variable take care of this. */ - if (assoc_p (var)) -! bind_assoc_variable (var, name, savestring ("0"), value, aflags); - else - bind_array_variable (name, 0, value, aflags); -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 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 -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-009.patch --- a/components/bash/patches/bash41-009.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-009 - -Bug-Reported-by: Tomas Trnka -Bug-Reference-ID: <201003242030.02166.tomastrnka@gmx.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-03/msg00090.html - -Bug-Description: - -An arriving SIGCHLD will interrupt `slow' system calls such as write(2) to -or read(2) from a terminal. This results in an error message and truncated -input or output. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/sig.c Fri Aug 14 16:31:52 2009 ---- sig.c Fri Mar 26 22:34:11 2010 -*************** -*** 655,660 **** ---- 655,663 ---- - act.sa_flags |= SA_INTERRUPT; /* XXX */ - else - act.sa_flags |= SA_RESTART; /* XXX */ -+ #else -+ if (sig == SIGCHLD) -+ act.sa_flags |= SA_RESTART; - #endif - sigemptyset (&act.sa_mask); - sigemptyset (&oact.sa_mask); -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 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 -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-010.patch --- a/components/bash/patches/bash41-010.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-010 - -Bug-Reported-by: Stephane Jourdois -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-05/msg00165.html - -Bug-Description: - -The expansion of the \W prompt string escape sequence incorrectly used -strcpy to copy overlapping strings. Only memmove works in this case. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/parse.y 2009-12-30 12:51:42.000000000 -0500 ---- parse.y 2011-02-24 16:40:48.000000000 -0500 -*************** -*** 5153,5157 **** - t = strrchr (t_string, '/'); - if (t) -! strcpy (t_string, t + 1); - } - } ---- 5153,5157 ---- - t = strrchr (t_string, '/'); - if (t) -! memmove (t_string, t + 1, strlen (t)); - } - } -*** ../bash-4.1-patched/y.tab.c 2009-12-30 12:52:02.000000000 -0500 ---- y.tab.c 2011-02-24 16:50:27.000000000 -0500 -*************** -*** 7482,7486 **** - t = strrchr (t_string, '/'); - if (t) -! strcpy (t_string, t + 1); - } - } ---- 7482,7486 ---- - t = strrchr (t_string, '/'); - if (t) -! memmove (t_string, t + 1, strlen (t)); - } - } -*************** -*** 8244,8246 **** - } - #endif /* HANDLE_MULTIBYTE */ -- ---- 8244,8245 ---- -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 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 -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-011.patch --- a/components/bash/patches/bash41-011.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-011 - -Bug-Reported-by: -Bug-Reference-ID: <4DAAC0DB.7060606@piumalab.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-04/msg00075.html - -Bug-Description: - -Under certain circumstances, running `fc -l' two times in succession with a -relative history offset at the end of the history will result in an incorrect -calculation of the last history entry and a seg fault. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1-patched/builtins/fc.def 2009-03-21 14:03:43.000000000 -0400 ---- builtins/fc.def 2011-04-19 15:46:17.000000000 -0400 -*************** -*** 304,307 **** ---- 304,317 ---- - last_hist = i - rh - hist_last_line_added; - -+ /* XXX */ -+ if (i == last_hist && hlist[last_hist] == 0) -+ while (last_hist >= 0 && hlist[last_hist] == 0) -+ last_hist--; -+ if (last_hist < 0) -+ { -+ sh_erange ((char *)NULL, _("history specification")); -+ return (EXECUTION_FAILURE); -+ } -+ - if (list) - { -*************** -*** 466,470 **** - { - int sign, n, clen, rh; -! register int i, j; - register char *s; - ---- 476,480 ---- - { - int sign, n, clen, rh; -! register int i, j, last_hist; - register char *s; - -*************** -*** 486,490 **** - calculation as if it were on. */ - rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list); -! i -= rh + hist_last_line_added; - - /* No specification defaults to most recent command. */ ---- 496,508 ---- - calculation as if it were on. */ - rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list); -! last_hist = i - rh - hist_last_line_added; -! -! if (i == last_hist && hlist[last_hist] == 0) -! while (last_hist >= 0 && hlist[last_hist] == 0) -! last_hist--; -! if (last_hist < 0) -! return (-1); -! -! i = last_hist; - - /* No specification defaults to most recent command. */ -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 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 -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-012.patch --- a/components/bash/patches/bash41-012.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-012 - -Bug-Reported-by: Stephane Chazelas -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, bash will execute user code while processing the -environment for exported function definitions. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.11/builtins/common.h 2009-12-22 16:30:42.000000000 -0500 ---- builtins/common.h 2014-09-16 19:27:38.000000000 -0400 -*************** -*** 36,39 **** ---- 36,41 ---- - - /* Flags for describe_command, shared between type.def and command.def */ -+ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */ -+ #define SEVAL_ONECMD 0x100 /* only allow a single command */ - #define CDESC_ALL 0x001 /* type -a */ - #define CDESC_SHORTDESC 0x002 /* command -V */ -*** ../bash-4.1.11/builtins/evalstring.c 2009-10-17 21:18:50.000000000 -0400 ---- builtins/evalstring.c 2014-09-16 19:27:38.000000000 -0400 -*************** -*** 262,265 **** ---- 262,273 ---- - 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"); -*************** -*** 322,325 **** ---- 330,336 ---- - dispose_fd_bitmap (bitmap); - discard_unwind_frame ("pe_dispose"); -+ -+ if (flags & SEVAL_ONECMD) -+ break; - } - } -*** ../bash-4.1.11/variables.c 2010-03-26 12:15:39.000000000 -0400 ---- variables.c 2014-09-16 19:27:38.000000000 -0400 -*************** -*** 348,357 **** - strcpy (temp_string + char_index + 1, string); - -! 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'; - - if (temp_var = find_function (name)) ---- 348,355 ---- - strcpy (temp_string + char_index + 1, string); - -! /* Don't import function names that are invalid identifiers from the -! environment. */ -! if (legal_identifier (name)) -! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - - if (temp_var = find_function (name)) -*************** -*** 362,369 **** - else - 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) ---- 360,363 ---- -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-013.patch --- a/components/bash/patches/bash41-013.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-013 - -Bug-Reported-by: Tavis Ormandy -Bug-Reference-ID: -Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 - -Bug-Description: - -Under certain circumstances, bash can incorrectly save a lookahead character and -return it on a subsequent call, even when reading a new line. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.12/parse.y 2011-02-24 19:41:01.000000000 -0500 ---- parse.y 2014-09-25 16:13:57.000000000 -0400 -*************** -*** 2812,2815 **** ---- 2812,2817 ---- - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-014.patch --- a/components/bash/patches/bash41-014.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-014 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This patch changes the encoding bash uses for exported functions to avoid -clashes with shell variables and to avoid depending only on an environment -variable's contents to determine whether or not to interpret it as a shell -function. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.13/variables.c 2014-09-16 19:27:38.000000000 -0400 ---- variables.c 2014-09-27 20:57:46.000000000 -0400 -*************** -*** 80,83 **** ---- 80,88 ---- - #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0') - -+ #define BASHFUNC_PREFIX "BASH_FUNC_" -+ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */ -+ #define BASHFUNC_SUFFIX "%%" -+ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */ -+ - extern char **environ; - -*************** -*** 269,273 **** - static void dispose_temporary_env __P((sh_free_func_t *)); - -! static inline char *mk_env_string __P((const char *, const char *)); - static char **make_env_array_from_var_list __P((SHELL_VAR **)); - static char **make_var_export_array __P((VAR_CONTEXT *)); ---- 274,278 ---- - static void dispose_temporary_env __P((sh_free_func_t *)); - -! static inline char *mk_env_string __P((const char *, const char *, int)); - static char **make_env_array_from_var_list __P((SHELL_VAR **)); - static char **make_var_export_array __P((VAR_CONTEXT *)); -*************** -*** 339,357 **** - /* If exported function, define it now. Don't import functions from - the environment in privileged mode. */ -! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) - { - string_length = strlen (string); -! temp_string = (char *)xmalloc (3 + string_length + char_index); - -! strcpy (temp_string, name); -! temp_string[char_index] = ' '; -! strcpy (temp_string + char_index + 1, string); - - /* Don't import function names that are invalid identifiers from the - environment. */ -! if (legal_identifier (name)) -! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - -! if (temp_var = find_function (name)) - { - VSETATTR (temp_var, (att_exported|att_imported)); ---- 344,373 ---- - /* If exported function, define it now. Don't import functions from - the environment in privileged mode. */ -! if (privmode == 0 && read_but_dont_execute == 0 && -! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) && -! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) && -! STREQN ("() {", string, 4)) - { -+ size_t namelen; -+ char *tname; /* desired imported function name */ -+ -+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN; -+ -+ tname = name + BASHFUNC_PREFLEN; /* start of func name */ -+ tname[namelen] = '\0'; /* now tname == func name */ -+ - string_length = strlen (string); -! temp_string = (char *)xmalloc (namelen + string_length + 2); - -! memcpy (temp_string, tname, namelen); -! temp_string[namelen] = ' '; -! memcpy (temp_string + namelen + 1, string, string_length + 1); - - /* Don't import function names that are invalid identifiers from the - environment. */ -! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) -! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - -! if (temp_var = find_function (tname)) - { - VSETATTR (temp_var, (att_exported|att_imported)); -*************** -*** 359,363 **** - } - else -! report_error (_("error importing function definition for `%s'"), name); - } - #if defined (ARRAY_VARS) ---- 375,382 ---- - } - else -! report_error (_("error importing function definition for `%s'"), tname); -! -! /* Restore original suffix */ -! tname[namelen] = BASHFUNC_SUFFIX[0]; - } - #if defined (ARRAY_VARS) -*************** -*** 2520,2524 **** - - INVALIDATE_EXPORTSTR (var); -! var->exportstr = mk_env_string (name, value); - - array_needs_making = 1; ---- 2539,2543 ---- - - INVALIDATE_EXPORTSTR (var); -! var->exportstr = mk_env_string (name, value, 0); - - array_needs_making = 1; -*************** -*** 3339,3357 **** - - static inline char * -! mk_env_string (name, value) - const char *name, *value; - { -! int name_len, value_len; -! char *p; - - name_len = strlen (name); - value_len = STRLEN (value); -! p = (char *)xmalloc (2 + name_len + value_len); -! strcpy (p, name); -! p[name_len] = '='; - if (value && *value) -! strcpy (p + name_len + 1, value); - else -! p[name_len + 1] = '\0'; - return (p); - } ---- 3358,3397 ---- - - static inline char * -! mk_env_string (name, value, isfunc) - const char *name, *value; -+ int isfunc; - { -! size_t name_len, value_len; -! char *p, *q; - - name_len = strlen (name); - value_len = STRLEN (value); -! -! /* If we are exporting a shell function, construct the encoded function -! name. */ -! if (isfunc && value) -! { -! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2); -! q = p; -! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN); -! q += BASHFUNC_PREFLEN; -! memcpy (q, name, name_len); -! q += name_len; -! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN); -! q += BASHFUNC_SUFFLEN; -! } -! else -! { -! p = (char *)xmalloc (2 + name_len + value_len); -! memcpy (p, name, name_len); -! q = p + name_len; -! } -! -! q[0] = '='; - if (value && *value) -! memcpy (q + 1, value, value_len + 1); - else -! q[1] = '\0'; -! - return (p); - } -*************** -*** 3439,3443 **** - using the cached exportstr... */ - list[list_index] = USE_EXPORTSTR ? savestring (value) -! : mk_env_string (var->name, value); - - if (USE_EXPORTSTR == 0) ---- 3479,3483 ---- - using the cached exportstr... */ - list[list_index] = USE_EXPORTSTR ? savestring (value) -! : mk_env_string (var->name, value, function_p (var)); - - if (USE_EXPORTSTR == 0) -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-015.patch --- a/components/bash/patches/bash41-015.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-015 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -There are two local buffer overflows in parse.y that can cause the shell -to dump core when given many here-documents attached to a single command -or many nested loops. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.14/parse.y 2014-09-27 12:18:25.000000000 -0400 ---- parse.y 2014-09-30 19:36:03.000000000 -0400 -*************** -*** 168,171 **** ---- 168,174 ---- - static int reserved_word_acceptable __P((int)); - static int yylex __P((void)); -+ -+ static void push_heredoc __P((REDIRECT *)); -+ static char *mk_alexpansion __P((char *)); - static int alias_expand_token __P((char *)); - static int time_command_acceptable __P((void)); -*************** -*** 262,266 **** - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ -! static REDIRECT *redir_stack[10]; - int need_here_doc; - ---- 265,271 ---- - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ -! #define HEREDOC_MAX 16 -! -! static REDIRECT *redir_stack[HEREDOC_MAX]; - int need_here_doc; - -*************** -*** 304,308 **** - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 -! static int word_lineno[MAX_CASE_NEST]; - static int word_top = -1; - ---- 309,313 ---- - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 -! static int word_lineno[MAX_CASE_NEST+1]; - static int word_top = -1; - -*************** -*** 517,521 **** - redir.filename = $2; - $$ = make_redirection (source, r_reading_until, redir, 0); -! redir_stack[need_here_doc++] = $$; - } - | NUMBER LESS_LESS WORD ---- 522,526 ---- - redir.filename = $2; - $$ = make_redirection (source, r_reading_until, redir, 0); -! push_heredoc ($$); - } - | NUMBER LESS_LESS WORD -*************** -*** 524,528 **** - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, 0); -! redir_stack[need_here_doc++] = $$; - } - | REDIR_WORD LESS_LESS WORD ---- 529,533 ---- - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, 0); -! push_heredoc ($$); - } - | REDIR_WORD LESS_LESS WORD -*************** -*** 531,535 **** - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -! redir_stack[need_here_doc++] = $$; - } - | LESS_LESS_MINUS WORD ---- 536,540 ---- - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -! push_heredoc ($$); - } - | LESS_LESS_MINUS WORD -*************** -*** 538,542 **** - redir.filename = $2; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -! redir_stack[need_here_doc++] = $$; - } - | NUMBER LESS_LESS_MINUS WORD ---- 543,547 ---- - redir.filename = $2; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -! push_heredoc ($$); - } - | NUMBER LESS_LESS_MINUS WORD -*************** -*** 545,549 **** - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -! redir_stack[need_here_doc++] = $$; - } - | REDIR_WORD LESS_LESS_MINUS WORD ---- 550,554 ---- - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -! push_heredoc ($$); - } - | REDIR_WORD LESS_LESS_MINUS WORD -*************** -*** 552,556 **** - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -! redir_stack[need_here_doc++] = $$; - } - | LESS_LESS_LESS WORD ---- 557,561 ---- - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -! push_heredoc ($$); - } - | LESS_LESS_LESS WORD -*************** -*** 2508,2511 **** ---- 2513,2531 ---- - static int esacs_needed_count; - -+ static void -+ push_heredoc (r) -+ REDIRECT *r; -+ { -+ if (need_here_doc >= HEREDOC_MAX) -+ { -+ last_command_exit_value = EX_BADUSAGE; -+ need_here_doc = 0; -+ report_syntax_error (_("maximum here-document count exceeded")); -+ reset_parser (); -+ exit_shell (last_command_exit_value); -+ } -+ redir_stack[need_here_doc++] = r; -+ } -+ - void - gather_here_documents () -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-016.patch --- a/components/bash/patches/bash41-016.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-016 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When bash is parsing a function definition that contains a here-document -delimited by end-of-file (or end-of-string), it leaves the closing delimiter -uninitialized. This can result in an invalid memory access when the parsed -function is later copied. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.15/make_cmd.c 2009-09-11 17:26:12.000000000 -0400 ---- make_cmd.c 2014-10-02 11:29:35.000000000 -0400 -*************** -*** 690,693 **** ---- 690,694 ---- - temp->redirector = source; - temp->redirectee = dest_and_filename; -+ temp->here_doc_eof = 0; - temp->instruction = instruction; - temp->flags = 0; -*** ../bash-4.1.15/copy_cmd.c 2009-09-11 16:28:02.000000000 -0400 ---- copy_cmd.c 2014-10-02 11:29:35.000000000 -0400 -*************** -*** 127,131 **** - case r_reading_until: - case r_deblank_reading_until: -! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof); - /*FALLTHROUGH*/ - case r_reading_string: ---- 127,131 ---- - case r_reading_until: - case r_deblank_reading_until: -! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0; - /*FALLTHROUGH*/ - case r_reading_string: -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash41-017.patch --- a/components/bash/patches/bash41-017.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.1 -Patch-ID: bash41-017 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -A combination of nested command substitutions and function importing from -the environment can cause bash to execute code appearing in the environment -variable value following the function definition. - -Patch (apply with `patch -p0'): - -*** ../bash-4.1.16/builtins/evalstring.c 2014-09-16 19:27:38.000000000 -0400 ---- builtins/evalstring.c 2014-10-04 15:08:26.000000000 -0400 -*************** -*** 262,271 **** - 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; - } - ---- 262,284 ---- - struct fd_bitmap *bitmap; - -! if (flags & SEVAL_FUNCDEF) - { -! char *x; -! -! /* If the command parses to something other than a straight -! function definition, or if we have not consumed the entire -! string, or if the parser has transformed the function -! name (as parsing will if it begins or ends with shell -! whitespace, for example), reject the attempt */ -! if (command->type != cm_function_def || -! ((x = parser_remaining_input ()) && *x) || -! (STREQ (from_file, command->value.Function_def->name->word) == 0)) -! { -! internal_warning (_("%s: ignoring function definition attempt"), from_file); -! should_jump_to_top_level = 0; -! last_result = last_command_exit_value = EX_BADUSAGE; -! reset_parser (); -! break; -! } - } - -*************** -*** 332,336 **** - - if (flags & SEVAL_ONECMD) -! break; - } - } ---- 345,352 ---- - - if (flags & SEVAL_ONECMD) -! { -! reset_parser (); -! break; -! } - } - } -*** ../bash-4.1.16/parse.y 2014-09-30 19:36:03.000000000 -0400 ---- parse.y 2014-10-04 15:08:26.000000000 -0400 -*************** -*** 2410,2413 **** ---- 2410,2423 ---- - } - -+ char * -+ parser_remaining_input () -+ { -+ if (shell_input_line == 0) -+ return 0; -+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len) -+ return '\0'; /* XXX */ -+ return (shell_input_line + shell_input_line_index); -+ } -+ - #ifdef INCLUDE_UNUSED - /* Back the input pointer up by one, effectively `ungetting' a character. */ -*************** -*** 3809,3814 **** - restore_parser_state (&ps); - reset_parser (); -! if (interactive) -! token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update ---- 3819,3824 ---- - restore_parser_state (&ps); - reset_parser (); -! -! token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update -*** ../bash-4.1.16/shell.h 2009-08-14 16:32:52.000000000 -0400 ---- shell.h 2014-10-04 15:08:26.000000000 -0400 -*************** -*** 164,167 **** ---- 164,169 ---- - - /* Let's try declaring these here. */ -+ extern char *parser_remaining_input __P((void)); -+ - extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *)); - extern void restore_parser_state __P((sh_parser_state_t *)); -*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 ---- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash44-001.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/bash44-001.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,60 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.4 +Patch-ID: bash44-001 + +Bug-Reported-by: Sean Zha +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00107.html + +Bug-Description: + +Bash-4.4 changed the way the history list is initially allocated to reduce +the number of reallocations and copies. Users who set HISTSIZE to a very +large number to essentially unlimit the size of the history list will get +memory allocation errors + +Patch (apply with `patch -p0'): + +*** ../bash-4.4/lib/readline/history.c 2015-12-28 13:50:31.000000000 -0500 +--- lib/readline/history.c 2016-09-30 14:28:40.000000000 -0400 +*************** +*** 58,61 **** +--- 58,63 ---- + #define DEFAULT_HISTORY_INITIAL_SIZE 502 + ++ #define MAX_HISTORY_INITIAL_SIZE 8192 ++ + /* The number of slots to increase the_history by. */ + #define DEFAULT_HISTORY_GROW_SIZE 50 +*************** +*** 308,312 **** + { + if (history_stifled && history_max_entries > 0) +! history_size = history_max_entries + 2; + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; +--- 310,316 ---- + { + if (history_stifled && history_max_entries > 0) +! history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE) +! ? MAX_HISTORY_INITIAL_SIZE +! : history_max_entries + 2; + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; +*** ../bash-4.4/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 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash44-002.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/bash44-002.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,69 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.4 +Patch-ID: bash44-002 + +Bug-Reported-by: Eric Pruitt +Bug-Reference-ID: <20160916055120.GA28272@sinister.codevat.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00015.html + +Bug-Description: + +Bash-4.4 warns when discarding NUL bytes in command substitution output +instead of silently dropping them. This patch changes the warnings from +one per NUL byte encountered to one warning per command substitution. + +Patch (apply with `patch -p0'): + +*** ../bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400 +--- subst.c 2016-09-26 10:20:19.000000000 -0400 +*************** +*** 5932,5935 **** +--- 5933,5937 ---- + int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul; + ssize_t bufn; ++ int nullbyte; + + istring = (char *)NULL; +*************** +*** 5939,5942 **** +--- 5941,5946 ---- + skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL; + ++ nullbyte = 0; ++ + /* Read the output of the command through the pipe. This may need to be + changed to understand multibyte characters in the future. */ +*************** +*** 5957,5961 **** + { + #if 1 +! internal_warning ("%s", _("command substitution: ignored null byte in input")); + #endif + continue; +--- 5961,5969 ---- + { + #if 1 +! if (nullbyte == 0) +! { +! internal_warning ("%s", _("command substitution: ignored null byte in input")); +! nullbyte = 1; +! } + #endif + continue; +*** ../bash-4.4/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 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash44-003.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/bash44-003.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.4 +Patch-ID: bash44-003 + +Bug-Reported-by: op7ic \x00 +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00005.html + +Bug-Description: + +Specially-crafted input, in this case an incomplete pathname expansion +bracket expression containing an invalid collating symbol, can cause the +shell to crash. + +Patch (apply with `patch -p0'): + +*** ../bash-4.4/lib/glob/sm_loop.c 2016-04-10 11:23:21.000000000 -0400 +--- lib/glob/sm_loop.c 2016-11-02 14:03:34.000000000 -0400 +*************** +*** 331,334 **** +--- 331,340 ---- + if (p[pc] == L('.') && p[pc+1] == L(']')) + break; ++ if (p[pc] == 0) ++ { ++ if (vp) ++ *vp = INVALID; ++ return (p + pc); ++ } + val = COLLSYM (p, pc); + if (vp) +*************** +*** 484,487 **** +--- 490,496 ---- + c = FOLD (c); + ++ if (c == L('\0')) ++ return ((test == L('[')) ? savep : (CHAR *)0); ++ + if ((flags & FNM_PATHNAME) && c == L('/')) + /* [/] can never match when matching a pathname. */ +*** ../bash-4.4/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 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash44-004.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/bash44-004.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,84 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.4 +Patch-ID: bash44-004 + +Bug-Reported-by: Christian Weisgerber +Bug-Reference-ID: <20161101160302.GB54856@lorvorc.mips.inka.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00004.html + +Bug-Description: + +There is a race condition that can result in bash referencing freed memory +when freeing data associated with the last process substitution. + +Patch (apply with `patch -p0'): + +*** ../bash-4.4/jobs.c 2016-08-23 16:38:44.000000000 -0400 +--- jobs.c 2016-11-02 18:24:45.000000000 -0400 +*************** +*** 454,457 **** +--- 454,472 ---- + } + ++ void ++ discard_last_procsub_child () ++ { ++ PROCESS *disposer; ++ sigset_t set, oset; ++ ++ BLOCK_CHILD (set, oset); ++ disposer = last_procsub_child; ++ last_procsub_child = (PROCESS *)NULL; ++ UNBLOCK_CHILD (oset); ++ ++ if (disposer) ++ discard_pipeline (disposer); ++ } ++ + struct pipeline_saver * + alloc_pipeline_saver () +*** ../bash-4.4/jobs.h 2016-04-27 10:35:51.000000000 -0400 +--- jobs.h 2016-11-02 18:25:08.000000000 -0400 +*************** +*** 191,194 **** +--- 191,195 ---- + extern void stop_making_children __P((void)); + extern void cleanup_the_pipeline __P((void)); ++ extern void discard_last_procsub_child __P((void)); + extern void save_pipeline __P((int)); + extern PROCESS *restore_pipeline __P((int)); +*** ../bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400 +--- subst.c 2016-11-02 18:23:24.000000000 -0400 +*************** +*** 5809,5816 **** + #if defined (JOB_CONTROL) + if (last_procsub_child) +! { +! discard_pipeline (last_procsub_child); +! last_procsub_child = (PROCESS *)NULL; +! } + last_procsub_child = restore_pipeline (0); + #endif +--- 5834,5838 ---- + #if defined (JOB_CONTROL) + if (last_procsub_child) +! discard_last_procsub_child (); + last_procsub_child = restore_pipeline (0); + #endif +*** ../bash-4.4/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 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/bash44-005.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/bash44-005.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.4 +Patch-ID: bash44-005 + +Bug-Reported-by: Dr. Werner Fink +Bug-Reference-ID: <20161107100936.ajnojd7dspirdflf@noether.suse.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00054.html + +Bug-Description: + +Under certain circumstances, a simple command is optimized to eliminate a +fork, resulting in an EXIT trap not being executed. + +Patch (apply with `patch -p0'): + +*** ../bash-4.4/builtins/evalstring.c 2016-08-11 14:18:51.000000000 -0400 +--- builtins/evalstring.c 2016-11-08 15:05:07.000000000 -0500 +*************** +*** 105,114 **** + *bash_input.location.string == '\0' && + command->type == cm_simple && +- #if 0 + signal_is_trapped (EXIT_TRAP) == 0 && + signal_is_trapped (ERROR_TRAP) == 0 && +- #else + any_signals_trapped () < 0 && +- #endif + command->redirects == 0 && command->value.Simple->redirects == 0 && + ((command->flags & CMD_TIME_PIPELINE) == 0) && +--- 105,111 ---- +*** ../bash-4.4/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 4 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-000.config.h.in.patch --- a/components/bash/patches/solaris-000.config.h.in.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ ---- config.h.in 2009-08-18 20:34:36.000000000 -0700 -+++ config.h.in 2010-09-01 10:21:00.756734104 -0700 -@@ -21,6 +21,8 @@ - #ifndef _CONFIG_H_ - #define _CONFIG_H_ - -+#include "config-top.h" -+ - /* Configuration feature settings controllable by autoconf. */ - - /* Define JOB_CONTROL if your operating system supports diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-001.config-top.h.patch --- a/components/bash/patches/solaris-001.config-top.h.patch Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/patches/solaris-001.config-top.h.patch Thu Jan 26 12:24:45 2017 +0100 @@ -1,10 +1,15 @@ ---- config-top.h 2009-12-22 12:29:39.000000000 -0800 -+++ config-top.h 2010-09-01 10:24:03.070928602 -0700 -@@ -54,14 +54,14 @@ +# Define defaults for Solaris. +# Solaris-specific patch. +# +# Not for upstream. + +--- config-top.h 2012-08-18 17:51:30.000000000 -0700 ++++ config-top.h 2015-04-02 10:08:29.143843829 -0700 +@@ -63,14 +63,14 @@ /* The default value of the PATH variable. */ #ifndef DEFAULT_PATH_VALUE #define DEFAULT_PATH_VALUE \ -- "/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:." +- "/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:." + "/usr/gnu/bin:/bin:/usr/bin:/sbin:/usr/sbin:." #endif @@ -17,8 +22,8 @@ #endif /* Default primary and secondary prompt strings. */ -@@ -75,14 +75,14 @@ - #define KSH_COMPATIBLE_SELECT +@@ -87,14 +87,14 @@ + #define DEFAULT_BASHRC "~/.bashrc" /* System-wide .bashrc file for interactive shells. */ -/* #define SYS_BASHRC "/etc/bash.bashrc" */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-002.Makefile.in.3.patch --- a/components/bash/patches/solaris-002.Makefile.in.3.patch Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/patches/solaris-002.Makefile.in.3.patch Thu Jan 26 12:24:45 2017 +0100 @@ -1,24 +1,11 @@ ---- Makefile.in 2009-12-30 10:05:40.000000000 -0800 -+++ Makefile.in 2011-02-04 16:31:01.659698136 -0800 -@@ -137,7 +137,7 @@ - STATIC_LD = @STATIC_LD@ - LOCAL_LDFLAGS = @LOCAL_LDFLAGS@ - --SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"' $(LOCALE_DEFS) -+SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"' $(LOCALE_DEFS) $(CFLAGS) - - BASE_CCFLAGS = $(PROFILE_FLAGS) $(SYSTEM_FLAGS) $(LOCAL_DEFS) \ - $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES) -@@ -535,7 +535,7 @@ - - $(Program): .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP) - $(RM) $@ -- $(PURIFY) $(CC) $(BUILTINS_LDFLAGS) $(LIBRARY_LDFLAGS) $(LDFLAGS) -o $(Program) $(OBJECTS) $(LIBS) -+ $(PURIFY) $(CC) $(CFLAGS) $(BUILTINS_LDFLAGS) $(LIBRARY_LDFLAGS) $(LDFLAGS) -o $(Program) $(OBJECTS) $(LIBS) $(LD_OPTIONS) -s - ls -l $(Program) - -$(SIZE) $(Program) - -@@ -549,10 +549,10 @@ +# Our compiler flags contain percent sign which get mixed up with percent sign +# seprators used by sed. +# +# Submitted to bug-bash@gnu.org + +--- Makefile.in 2016-12-06 14:52:25.890038489 +0100 ++++ Makefile.in 2016-12-06 14:52:15.493002959 +0100 +@@ -584,10 +584,11 @@ $(Program): .build $(OBJECTS) $(BUILTIN @echo bashbug: $(SUPPORT_SRC)bashbug.sh config.h Makefile $(VERSPROG) @@ -26,10 +13,11 @@ - -e "s%!CFLAGS!%$(CCFLAGS)%" -e "s%!CC!%$(CC)%" \ - -e "s%!RELEASE!%$(Version)%" -e "s%!PATCHLEVEL!%$(PatchLevel)%" \ - -e "s%!MACHTYPE!%$(MACHTYPE)%" -e "s%!RELSTATUS!%$(RELSTATUS)%" \ -+ @sed -e "s^!MACHINE!^$(Machine)^" -e "s^!OS!^$(OS)^" \ -+ -e "s^!CFLAGS!^$(CCFLAGS)^" -e "s^!CC!^$(CC)^" \ -+ -e "s^!RELEASE!^$(Version)^" -e "s^!PATCHLEVEL!^$(PatchLevel)^" \ -+ -e "s^!MACHTYPE!^$(MACHTYPE)^" -e "s^!RELSTATUS!^$(RELSTATUS)^" \ ++ @s=$$(printf '\001'); \ ++ sed -e "s$${s}!MACHINE!$${s}$(Machine)$${s}" -e "s$${s}!OS!$${s}$(OS)$${s}" \ ++ -e "s$${s}!CFLAGS!$${s}$(CCFLAGS)$${s}" -e "s$${s}!CC!$${s}$(CC)$${s}" \ ++ -e "s$${s}!RELEASE!$${s}$(Version)$${s}" -e "s$${s}!PATCHLEVEL!$${s}$(PatchLevel)$${s}" \ ++ -e "s$${s}!MACHTYPE!$${s}$(MACHTYPE)$${s}" -e "s$${s}!RELSTATUS!$${s}$(RELSTATUS)$${s}" \ $(SUPPORT_SRC)bashbug.sh > $@ @chmod a+rx bashbug diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-003.glob.c.patch --- a/components/bash/patches/solaris-003.glob.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ ---- lib/glob/glob.c 2009-11-14 15:39:30.000000000 -0800 -+++ lib/glob/glob.c 2010-09-01 10:28:10.161379481 -0700 -@@ -34,6 +34,10 @@ - # include - #endif - -+#if defined (HAVE_ALLOCA) && defined (HAVE_ALLOCA_H) -+# include -+#endif -+ - #include "bashansi.h" - #include "posixdir.h" - #include "posixstat.h" diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-004.snprintf.c.patch --- a/components/bash/patches/solaris-004.snprintf.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ ---- lib/sh/snprintf.c 2008-08-12 12:02:14.000000000 -0400 -+++ lib/sh/snprintf.c 2009-08-10 15:16:30.000000000 -0400 -@@ -116,6 +116,8 @@ - # include - #endif - -+#include -+ - #include "stdc.h" - #include - diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-005.variables.c.patch --- a/components/bash/patches/solaris-005.variables.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/patches/solaris-005.variables.c.patch Thu Jan 26 12:24:45 2017 +0100 @@ -1,15 +1,25 @@ ---- variables.c 2009-01-04 14:32:46.000000000 -0500 -+++ variables.c 2009-08-15 14:53:56.426776000 -0400 -@@ -402,14 +402,10 @@ +# Export the default variables if they aren't set. +# Otherwise we end up with inconsistently defined/exported +# defaults. +# Solaris-specific patch. +# +# I don't fully understand what this does. It would be worth discussing with +# upstream. They clerly were using the commands at some point in time. + +--- variables.c 2011-01-24 17:07:48.000000000 -0800 ++++ variables.c 2011-11-29 09:29:51.902791524 -0800 +@@ -471,14 +471,12 @@ /* Now make our own defaults in case the vars that we think are important are missing. */ temp_var = set_if_not ("PATH", DEFAULT_PATH_VALUE); -#if 0 ++ set_auto_export (temp_var); /* XXX */ -#endif temp_var = set_if_not ("TERM", "dumb"); -#if 0 ++ set_auto_export (temp_var); /* XXX */ -#endif diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-006.signames.c.patch --- a/components/bash/patches/solaris-006.signames.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ ---- support/signames.c 2008-08-13 08:31:48.000000000 -0400 -+++ support/signames.c 2009-08-15 16:40:01.729682000 -0400 -@@ -212,6 +212,14 @@ - signal_names[SIGXRES] = "SIGXRES"; - #endif - -+#if defined (SIGJVM1) /* Solaris Java Virtual Machine 1 */ -+ signal_names[SIGJVM1] = "SIGJVM1"; -+#endif -+ -+#if defined (SIGJVM2) /* Solaris Java Virtual Machine 2 */ -+ signal_names[SIGJVM2] = "SIGJVM2"; -+#endif -+ - /* HP-UX */ - #if defined (SIGDIL) /* DIL signal (?) */ - signal_names[SIGDIL] = "SIGDIL"; diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-007.rlprivate.h.patch --- a/components/bash/patches/solaris-007.rlprivate.h.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ ---- lib/readline/rlprivate.h 2009-01-22 21:56:49.000000000 -0500 -+++ lib/readline/rlprivate.h 2009-08-16 10:55:56.178609000 -0400 -@@ -23,6 +23,18 @@ - #if !defined (_RL_PRIVATE_H_) - #define _RL_PRIVATE_H_ - -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#if defined(HANDLE_MULTIBYTE) -+ -+#include -+#include -+#include -+ -+#endif /* HANDLE_MULTIBYTE */ -+ - #include "rlconf.h" /* for VISIBLE_STATS */ - #include "rlstdc.h" - #include "posixjmp.h" /* defines procenv_t */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-008.xmbsrtowcs.c.patch --- a/components/bash/patches/solaris-008.xmbsrtowcs.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ ---- lib/glob/xmbsrtowcs.c 2008-08-12 10:17:54.000000000 -0400 -+++ lib/glob/xmbsrtowcs.c 2009-08-10 15:46:18.000000000 -0400 -@@ -30,7 +30,7 @@ - #if HANDLE_MULTIBYTE - - #ifndef FREE --# define FREE(x) do { if (x) free (x); } while (0) -+# define FREE(x) do { if (x) free (x); x = 0; } while (0) - #endif - /* On some locales (ex. ja_JP.sjis), mbsrtowc doesn't convert 0x5c to U<0x5c>. - So, this function is made for converting 0x5c to U<0x5c>. */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-009.configure.patch --- a/components/bash/patches/solaris-009.configure.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,321 +0,0 @@ ---- configure 2009-12-29 05:34:51.000000000 -0800 -+++ configure 2010-09-01 10:45:06.225859891 -0700 -@@ -1,4 +1,4 @@ --#! /bin/sh -+#! /bin/bash - # From configure.in for Bash 4.1, version 4.019. - # Guess values for system-dependent variables and create Makefiles. - # Generated by GNU Autoconf 2.63 for bash 4.1-release. -@@ -13,6 +13,8 @@ - ## M4sh Initialization. ## - ## --------------------- ## - -+export LD_OPTIONS="-lc -lm -lgen -lsocket -lnsl -lresolv -z ignore" -+ - # Be more Bourne compatible - DUALCASE=1; export DUALCASE # for MKS sh - if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -@@ -592,7 +594,7 @@ - subdirs= - MFLAGS= - MAKEFLAGS= --SHELL=${CONFIG_SHELL-/bin/sh} -+SHELL=${CONFIG_SHELL-/bin/bash} - - # Identity of this package. - PACKAGE_NAME='bash' -@@ -3500,7 +3502,7 @@ - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no -- CFLAGS="-g" -+ CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -3579,7 +3581,7 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag -- CFLAGS="-g" -+ CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -3638,7 +3640,7 @@ - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else -- CFLAGS="-g" -+ CFLAGS="" - fi - else - if test "$GCC" = yes; then -@@ -5092,7 +5094,7 @@ - - if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then -- CC_FOR_BUILD='$(CC)' -+ CC_FOR_BUILD='$(CC) $(CPPFLAGS) $(CFLAGS)' - else - CC_FOR_BUILD=gcc - fi -@@ -5100,7 +5102,7 @@ - - - --test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 -+test -z "$CFLAGS" && CFLAGS="${CFLAGS}" auto_cflags=1 - - test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2" - -@@ -5132,7 +5134,7 @@ - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} - fi - --test -z "$CFLAGS_FOR_BUILD" && CFLAGS_FOR_BUILD="-g" -+test -z "$CFLAGS_FOR_BUILD" && CFLAGS_FOR_BUILD="" - - - -@@ -5257,9 +5259,14 @@ - int - main () - { -+#if defined(sun) || defined(__sun) || defined(__sun__) -+#error "we want to use libcurses." -+return 255; -+#else - return tgetent (); - ; - return 0; -+#endif - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext -@@ -6164,7 +6171,7 @@ - $as_echo_n "(cached) " >&6 - else - cat >conftest.make <<\_ACEOF --SHELL = /bin/sh -+SHELL = /bin/bash - all: - @echo '@@@%%%=$(MAKE)=@@@%%%' - _ACEOF -@@ -6190,7 +6197,7 @@ - - case "$host_os" in - opennt*|interix*) MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;; --*) MAKE_SHELL=/bin/sh ;; -+*) MAKE_SHELL=/bin/bash ;; - esac - - -@@ -7177,7 +7184,7 @@ - # Prepare PATH_SEPARATOR. - # The user is always right. - if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -+ echo "#! /bin/bash" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -@@ -7191,7 +7198,7 @@ - # Find out how to test for executable files. Don't use a zero-byte file, - # as systems may use methods other than mode bits to determine executability. - cat >conf$$.file <<_ASEOF --#! /bin/sh -+#! /bin/bash - exit 0 - _ASEOF - chmod +x conf$$.file -@@ -7288,7 +7295,7 @@ - # Prepare PATH_SEPARATOR. - # The user is always right. - if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -+ echo "#! /bin/bash" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -@@ -7302,7 +7309,7 @@ - # Find out how to test for executable files. Don't use a zero-byte file, - # as systems may use methods other than mode bits to determine executability. - cat >conf$$.file <<_ASEOF --#! /bin/sh -+#! /bin/bash - exit 0 - _ASEOF - chmod +x conf$$.file -@@ -7359,7 +7366,7 @@ - # Prepare PATH_SEPARATOR. - # The user is always right. - if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -+ echo "#! /bin/bash" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -@@ -7373,7 +7380,7 @@ - # Find out how to test for executable files. Don't use a zero-byte file, - # as systems may use methods other than mode bits to determine executability. - cat >conf$$.file <<_ASEOF --#! /bin/sh -+#! /bin/bash - exit 0 - _ASEOF - chmod +x conf$$.file -@@ -8992,7 +8999,7 @@ - # Prepare PATH_SEPARATOR. - # The user is always right. - if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -+ echo "#! /bin/bash" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -@@ -9102,7 +9109,7 @@ - else - - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ -- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh -+ ${CONFIG_SHELL-/bin/bash} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done -@@ -13042,39 +13049,18 @@ - /* end confdefs.h. */ - /* Define isinf to an innocuous variant, in case declares isinf. - For example, HP-UX 11i declares gettimeofday. */ --#define isinf innocuous_isinf -- --/* System header to define __stub macros and hopefully few prototypes, -- which can conflict with char isinf (); below. -- Prefer to if __STDC__ is defined, since -- exists even on freestanding compilers. */ -- --#ifdef __STDC__ --# include --#else --# include --#endif -- --#undef isinf -- -+#include - /* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char isinf (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined __stub_isinf || defined __stub___isinf --choke me --#endif - - int - main () - { --return isinf (); -+return isinf(0.0); - ; - return 0; - } -@@ -13134,39 +13120,26 @@ - /* end confdefs.h. */ - /* Define isnan to an innocuous variant, in case declares isnan. - For example, HP-UX 11i declares gettimeofday. */ --#define isnan innocuous_isnan - - /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char isnan (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - --#ifdef __STDC__ --# include --#else --# include --#endif -- --#undef isnan -+#include - - /* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char isnan (); -+ - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined __stub_isnan || defined __stub___isnan --choke me --#endif - - int - main () - { --return isnan (); -+return isnan(0.0); - ; - return 0; - } -@@ -25521,7 +25494,7 @@ - exit 69 - ' >conftest - chmod u+x conftest --(SHELL=/bin/sh; export SHELL; ./conftest >/dev/null 2>&1) -+(SHELL=/bin/bash; export SHELL; ./conftest >/dev/null 2>&1) - if test $? -ne 69; then - ac_cv_sys_interpreter=yes - else -@@ -30117,9 +30090,14 @@ - int - main () - { -+#if defined(sun) || defined(__sun) || defined(__sun__) -+#error "we want to use libcurses" -+return 255; -+#else - return tgetent (); - ; - return 0; -+#endif - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext -@@ -30302,7 +30280,7 @@ - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS --LIBS="-lcurses $LIBS" -+LIBS="/usr/lib/64/libcurses.so.1 $LIBS" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -30468,7 +30446,7 @@ - TERMCAP_LIB= - TERMCAP_DEP= - else --TERMCAP_LIB=-lcurses -+TERMCAP_LIB=/usr/lib/64/libcurses.so.1 - TERMCAP_DEP= - fi - -@@ -30676,7 +30654,7 @@ - then - { $as_echo "$as_me:$LINENO: checking shared object configuration for loadable builtins" >&5 - $as_echo_n "checking shared object configuration for loadable builtins... " >&6; } -- eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"` -+ eval `${CONFIG_SHELL-/bin/bash} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"` - - - diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-010.input.c.patch --- a/components/bash/patches/solaris-010.input.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ ---- lib/readline/input.c 2009-04-19 10:12:03.000000000 -0700 -+++ lib/readline/input.c 2010-09-01 10:46:23.386144948 -0700 -@@ -51,6 +51,10 @@ - # include - #endif - -+#if defined(SOLARIS) -+# include -+#endif -+ - #include - #include - diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-011.input_avail.c.patch --- a/components/bash/patches/solaris-011.input_avail.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ ---- lib/sh/input_avail.c 2009-04-19 10:01:14.000000000 -0700 -+++ lib/sh/input_avail.c 2010-09-01 10:47:30.418016819 -0700 -@@ -45,6 +45,10 @@ - # include - #endif - -+#if defined(SOLARIS) -+# include /* Solaris FIONREAD */ -+#endif -+ - #include - #include - diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-012.inputrc.location.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-012.inputrc.location.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,87 @@ +# Solaris-specific system paths. +# Our bash configuration lives in /etc/bash/inputrc. +# Not for upstream. + +--- lib/readline/rlconf.h 2009-01-04 11:32:33.000000000 -0800 ++++ lib/readline/rlconf.h 2010-09-01 10:48:13.018894232 -0700 +@@ -43,7 +43,7 @@ + #define DEFAULT_INPUTRC "~/.inputrc" + + /* The ultimate last-ditch filenname for an init file -- system-wide. */ +-#define SYS_INPUTRC "/etc/inputrc" ++#define SYS_INPUTRC "/etc/bash/inputrc" + + /* If defined, expand tabs to spaces. */ + #define DISPLAY_TABS +--- doc/bashref.info 2016-11-20 11:39:05.161711301 +0100 ++++ doc/bashref.info 2016-11-20 11:38:49.065536928 +0100 +@@ -7124,7 +7124,7 @@ putting commands in an "inputrc" file, c + directory. The name of this file is taken from the value of the shell + variable 'INPUTRC'. If that variable is unset, the default is + '~/.inputrc'. If that file does not exist or cannot be read, the +-ultimate default is '/etc/inputrc'. ++ultimate default is '/etc/bash/inputrc'. + + When a program which uses the Readline library starts up, the init + file is read, and the key bindings are set. +@@ -7636,8 +7636,8 @@ four parser directives used. + '$include' + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the following +- directive reads from '/etc/inputrc': +- $include /etc/inputrc ++ directive reads from '/etc/bash/inputrc': ++ $include /etc/bash/inputrc + +  + File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File +@@ -7656,8 +7656,8 @@ variable assignment, and conditional syn + # Lines beginning with '#' are comments. + # + # First, include any system-wide bindings and variable +- # assignments from /etc/Inputrc +- $include /etc/Inputrc ++ # assignments from /etc/bash/inputrc ++ $include /etc/bash/inputrc + + # + # Set various bindings for emacs mode. +# Solaris-specific configuration defaults. +# Our bash system configuration files are in /etc/bash. +# Not for upstream. +--- doc/bash.1 2011-01-16 12:31:39.000000000 -0800 ++++ doc/bash.1 2011-11-29 09:57:25.406978670 -0800 +@@ -5810,11 +5810,11 @@ + .IP \fB$include\fP + This directive takes a single filename as an argument and reads commands + and bindings from that file. For example, the following directive +-would read \fI/etc/inputrc\fP: ++would read \fI/etc/bash/inputrc\fP: + .sp 1 + .RS + .nf +-\fB$include\fP \^ \fI/etc/inputrc\fP ++\fB$include\fP \^ \fI/etc/bash/inputrc\fP + .fi + .RE + .SS Searching +--- doc/bash.info 2016-12-02 09:24:09.777589027 +0000 ++++ doc/bash.info 2016-12-02 09:23:42.588282332 +0000 +@@ -7124,7 +7124,7 @@ putting commands in an "inputrc" file, c + directory. The name of this file is taken from the value of the shell + variable 'INPUTRC'. If that variable is unset, the default is + '~/.inputrc'. If that file does not exist or cannot be read, the +-ultimate default is '/etc/inputrc'. ++ultimate default is '/etc/bash/inputrc'. + + When a program which uses the Readline library starts up, the init + file is read, and the key bindings are set. +@@ -7636,7 +7636,7 @@ four parser directives used. + '$include' + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the following +- directive reads from '/etc/inputrc': ++ directive reads from '/etc/bash/inputrc': + $include /etc/inputrc + +  diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-012.rlconf.h.patch --- a/components/bash/patches/solaris-012.rlconf.h.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ ---- lib/readline/rlconf.h 2009-01-04 11:32:33.000000000 -0800 -+++ lib/readline/rlconf.h 2010-09-01 10:48:13.018894232 -0700 -@@ -39,7 +39,7 @@ - #define DEFAULT_INPUTRC "~/.inputrc" - - /* The ultimate last-ditch filenname for an init file -- system-wide. */ --#define SYS_INPUTRC "/etc/inputrc" -+#define SYS_INPUTRC "/etc/bash/inputrc" - - /* If defined, expand tabs to spaces. */ - #define DISPLAY_TABS diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-013.bashref.info.patch --- a/components/bash/patches/solaris-013.bashref.info.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ ---- doc/bashref.info 2009-12-29 12:59:33.000000000 -0800 -+++ doc/bashref.info 2010-09-01 10:49:49.070499702 -0700 -@@ -6387,7 +6387,7 @@ - directory. The name of this file is taken from the value of the shell - variable `INPUTRC'. If that variable is unset, the default is - `~/.inputrc'. If that file does not exist or cannot be read, the --ultimate default is `/etc/inputrc'. -+ultimate default is `/etc/bash/inputrc'. - - When a program which uses the Readline library starts up, the init - file is read, and the key bindings are set. -@@ -6812,8 +6812,8 @@ - `$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. For example, the following -- directive reads from `/etc/inputrc': -- $include /etc/inputrc -+ directive reads from `/etc/bash/inputrc': -+ $include /etc/bash/inputrc - -  - File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-014.bash.man.patch --- a/components/bash/patches/solaris-014.bash.man.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -*** doc/bash.1.orig Wed Oct 12 06:45:05 2011 ---- doc/bash.1 Wed Oct 12 06:45:46 2011 -*************** -*** 3843,3849 **** - .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP - conditional operator - .TP -! .B = *= /= %= += \-= <<= >>= &= ^= |= - assignment - .TP - .B \fIexpr1\fP , \fIexpr2\fP ---- 3843,3849 ---- - .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP - conditional operator - .TP -! .B "= *= /= %= += \-= <<= >>= &= ^= |=" - assignment - .TP - .B \fIexpr1\fP , \fIexpr2\fP -*************** -*** 5235,5245 **** - .IP \fB$include\fP - This directive takes a single filename as an argument and reads commands - and bindings from that file. For example, the following directive -! would read \fI/etc/inputrc\fP: - .sp 1 - .RS - .nf -! \fB$include\fP \^ \fI/etc/inputrc\fP - .fi - .RE - .SS Searching ---- 5235,5245 ---- - .IP \fB$include\fP - This directive takes a single filename as an argument and reads commands - and bindings from that file. For example, the following directive -! would read \fI/etc/bash/inputrc\fP: - .sp 1 - .RS - .nf -! \fB$include\fP \^ \fI/etc/bash/inputrc\fP - .fi - .RE - .SS Searching diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-015.rbash.man.patch --- a/components/bash/patches/solaris-015.rbash.man.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ ---- doc/rbash.1 2008-08-12 06:24:51.000000000 -0700 -+++ doc/rbash.1 2010-09-01 10:52:04.397206373 -0700 -@@ -1,8 +1,8 @@ --.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.0" -+.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.1" - .SH NAME - rbash \- restricted bash, see \fBbash\fR(1) - .SH RESTRICTED SHELL - .nr zY 1 --.so bash.1 -+.so /usr/share/man/man1/bash.1 - .SH SEE ALSO - bash(1) diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-016.eaccess.c.patch --- a/components/bash/patches/solaris-016.eaccess.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -# -# Backported to bash 4.1 from: -# http://lists.gnu.org/archive/html/bug-bash/2012-07/msg00027.html -# Also see: -# https://bugzilla.redhat.com/show_bug.cgi?id=840091 -# http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3410 -# ---- lib/sh/eaccess.c 2008-08-12 08:50:01.000000000 -0700 -+++ lib/sh/eaccess.c 2012-07-24 09:39:37.970186946 -0700 -@@ -40,6 +40,10 @@ - #if !defined (_POSIX_VERSION) && defined (HAVE_SYS_FILE_H) - # include - #endif /* !_POSIX_VERSION */ -+ -+#include /* memset(3C) */ -+#include /* _XOPEN_PATH_MAX */ -+ - #include "posixstat.h" - #include "filecntl.h" - -@@ -82,6 +86,8 @@ - const char *path; - struct stat *finfo; - { -+ static char pbuf[_XOPEN_PATH_MAX + 1]; -+ - if (*path == '\0') - { - errno = ENOENT; -@@ -106,9 +112,10 @@ - trailing slash. Make sure /dev/fd/xx really uses DEV_FD_PREFIX/xx. - On most systems, with the notable exception of linux, this is - effectively a no-op. */ -- char pbuf[32]; -+ (void) memset (pbuf, '\0', sizeof(pbuf)); - strcpy (pbuf, DEV_FD_PREFIX); -- strcat (pbuf, path + 8); -+ strncat (pbuf, path + 8, -+ (size_t) (sizeof(pbuf) - sizeof(DEV_FD_PREFIX))); - return (stat (pbuf, finfo)); - #endif /* !HAVE_DEV_FD */ - } diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-016.run-all.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-016.run-all.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,17 @@ +# Our build system exports SHELLOPTS which makes testing fail We could have set +# "unexport SHELLOPTS" in our Makefile, but maybe this will be accepted by +# community? +# +# Reported to bug-bash@gnu.org + +--- tests/run-all 2016-11-28 00:46:51.812583704 -0800 ++++ tests/run-all 2016-11-28 00:45:20.302845042 -0800 +@@ -17,7 +17,7 @@ export PATH + # unset BASH_ENV only if it is set + [ "${BASH_ENV+set}" = "set" ] && unset BASH_ENV + # ditto for SHELLOPTS +-#[ "${SHELLOPTS+set}" = "set" ] && unset SHELLOPTS ++[ "${SHELLOPTS+set}" = "set" ] && unset SHELLOPTS + + : ${THIS_SH:=../bash} + export THIS_SH diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-017.bashhist.c.patch --- a/components/bash/patches/solaris-017.bashhist.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -- in maybe_append_history, change check for history_lines_this_session - so that we append the lines to the file if it's equal to the value - returned by where_history(). This means that without this change, - the history won't be appended if all the lines in the history list - were added in the current session since the last time the history - file was read or written. Fixes bug reported by Bruce Korb - - -http://lists.gnu.org/archive/html/bug-bash/2010-08/msg00101.html - ---- bashhist.c 2009-08-14 12:33:02.000000000 -0700 -+++ bashhist.c 2013-08-26 02:05:33.384872000 -0700 -@@ -372,7 +372,7 @@ maybe_append_history (filename) - struct stat buf; - - result = EXECUTION_SUCCESS; -- if (history_lines_this_session && (history_lines_this_session < where_history ())) -+ if (history_lines_this_session && (history_lines_this_session <= where_history ())) - { - /* If the filename was supplied, then create it if necessary. */ - if (stat (filename, &buf) == -1 && errno == ENOENT) diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-018.posixexp2.tests.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-018.posixexp2.tests.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,105 @@ +# solaris is compiled with --enable-xpg-echo-default=yes which makes some +# tests fail. Should we use printf '%s\n' "..." instead? +# +# Reported on bug-bash@gnu.org + +--- tests/posixexp2.tests 2010-11-11 17:50:47.000000000 -0800 ++++ tests/posixexp2.tests 2012-07-12 13:15:14.818468328 -0700 +@@ -2,6 +2,11 @@ + + set -o posix + ++xpg=`shopt | grep xpg_echo | awk '{ print $2 }'` ++if [ ${xpg} = "on" ] ; then ++ shopt -u xpg_echo ++fi ++ + (echo 1 ${IFS+'}'z}) 2>&- || echo failed in 1 + (echo 2 "${IFS+'}'z}") 2>&- || echo failed in 2 + (echo 3 "foo ${IFS+'bar} baz") 2>&- || echo failed in 3 +--- tests/comsub2.sub 2016-11-28 01:04:23.177652643 -0800 ++++ tests/comsub2.sub 2016-11-28 01:01:49.330747645 -0800 +@@ -4,5 +4,5 @@ echo "$qpath" + + # it's crazy that all three of these produce the same result + echo ${qpath//\\/} +-echo ${qpath//"`echo \\`"/} +-echo ${qpath//`echo "\\\\\\\\"`/} ++echo ${qpath//"`echo -E \\`"/} ++echo ${qpath//`echo -E "\\\\\\\\"`/} +--- tests/exp5.sub 2016-11-28 02:38:32.148794257 -0800 ++++ tests/exp5.sub 2016-11-28 02:33:12.133199473 -0800 +@@ -1,18 +1,18 @@ + # expansions involving patterns + + var='[hello' +-echo "${var//[/}" ++echo -E "${var//[/}" + + red='\[\e[0;31m\]' +-echo "${red//\\[\\e/}" ++echo -E "${red//\\[\\e/}" + + foo="${red//\\[\\e/}" + + # foo == [0;31m\] +-echo "${foo//[0;31m\\/}" ++echo -E "${foo//[0;31m\\/}" + +-echo "${var//[]/}" +-echo "${red//[]/}" ++echo -E "${var//[]/}" ++echo -E "${red//[]/}" + + v=hello + foo='[:alpha:]' +--- tests/exp8.sub 2016-11-28 03:44:56.875686938 -0800 ++++ tests/exp8.sub 2016-11-28 03:39:21.761054928 -0800 +@@ -10,11 +10,11 @@ declare -p var | sed -n l + + recho ${var@Q} + recho ${var@P} +-echo ${var@A} ++echo -E ${var@A} + + unset array + array=( [$'x\001y\177z']=foo ) # should be error +-echo ${array[@]@A} ++echo -E ${array[@]@A} + + unset array + declare -a array=([0]=$'x\001y\177z') +@@ -23,9 +23,9 @@ declare -p array + unset array + array=( "$var" ) + recho ${array[@]} +-echo ${array[@]@A} ++echo -E ${array[@]@A} + + unset array + declare -A array + array=( [$'x\001y\177z']=$'a\242b\002c' ) +-echo ${array[@]@A} ++echo -E ${array[@]@A} +--- tests/heredoc3.sub 2016-11-28 03:58:47.587299575 -0800 ++++ tests/heredoc3.sub 2016-11-28 03:55:11.935894965 -0800 +@@ -69,7 +69,7 @@ cat <\END' ++echo -E end 'hello\END' + + # this has to be last -- results in a syntax error + # doesn't currently parse because EOF is not on a line by itself -- should it? +--- tests/quote1.sub 2016-11-28 04:11:46.210688369 -0800 ++++ tests/quote1.sub 2016-11-28 04:08:49.101872596 -0800 +@@ -14,7 +14,7 @@ echo "'${test//"'"/}'" + + echo "'${test//"'"/"'\\''"}'" + +-echo "'${test//"'"/\'\\'\'}'" ++echo -E "'${test//"'"/\'\\'\'}'" + + #echo "'${test//'/}'" # hangs waiting for ' + #echo "'${test//"'"/'\\''}'" # hangs waiting for ' diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-022.bash.sighup.patch --- a/components/bash/patches/solaris-022.bash.sighup.patch Fri Jan 27 15:04:39 2017 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -# Internal patch. Upstream will not accept it. -# If read EOF on a non-blank line do not interpret as a NL. -# Clear the readline buffers and return eof_found. ---- lib/readline/readline.c 2009-08-31 05:45:31.000000000 -0700 -+++ lib/readline/readline.c 2015-02-18 11:10:55.652803033 -0800 -@@ -533,7 +533,15 @@ - - /* EOF typed to a non-blank line is a . */ - if (c == EOF && rl_end) -- c = NEWLINE; -+ { -+ _rl_internal_char_cleanup (); -+ eof_found = 1; -+#if defined (READLINE_CALLBACKS) -+ return 0; -+#else -+ return (eof_found); -+#endif -+ } - - /* The character _rl_eof_char typed to blank line, and not as the - previous character is interpreted as EOF. */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-023.eaccess.c.patch --- a/components/bash/patches/solaris-023.eaccess.c.patch Fri Jan 27 15:04:39 2017 -0800 +++ b/components/bash/patches/solaris-023.eaccess.c.patch Thu Jan 26 12:24:45 2017 +0100 @@ -1,16 +1,21 @@ -# Internal patch. -# Do not return true if euid == 0 and file does not have the execute bit set. ---- lib/sh/eaccess.c 2015-02-26 14:23:13.619717483 -0800 -+++ lib/sh/eaccess.c 2015-02-26 14:29:09.644569957 -0800 -@@ -208,8 +208,10 @@ +# Solaris-specific. The famous access(2) bug that will return +# X_OK even if the execute bit isn't set. +# So, we want to use stat(2) instead, which returns the actual +# permission bits. +# +# I do know nothing about the mentioned bug, keeping the patch just to be sure. +# +# Not suitable for upstream + +--- lib/sh/eaccess.c 2015-04-02 10:24:43.401129429 -0700 ++++ lib/sh/eaccess.c 2015-04-02 10:28:57.704781076 -0700 +@@ -211,7 +211,8 @@ if (path_is_devfd (path)) return (sh_stataccess (path, mode)); --#if defined (HAVE_EACCESS) /* FreeBSD */ -+#if defined(HAVE_EACCESS) && !defined(SOLARIS) /* FreeBSD */ - return (eaccess (path, mode)); -+#elif defined(SOLARIS) -+ return (sh_stataccess (path, mode)); - #elif defined (EFF_ONLY_OK) /* SVR4(?), SVR4.2 */ - return access (path, mode|EFF_ONLY_OK); - #else +-#if (defined (HAVE_FACCESSAT) && defined (AT_EACCESS)) || defined (HAVE_EACCESS) ++#if ((defined (HAVE_FACCESSAT) && defined (AT_EACCESS)) || \ ++ defined (HAVE_EACCESS)) && !defined(SOLARIS) + # if defined (HAVE_FACCESSAT) && defined (AT_EACCESS) + ret = faccessat (AT_FDCWD, path, mode, AT_EACCESS); + # else /* HAVE_EACCESS */ /* FreeBSD */ diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-025.false_exit_code.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-025.false_exit_code.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,16 @@ +# This test prints return value of various commands. In this particular case +# it's the return value of /bin/false which on Solaris returns 255. +# +# Not suitable for upstream. + +--- tests/exec.right 2016-11-28 01:58:36.053039919 -0800 ++++ tests/exec.right 2016-11-28 01:58:07.419101147 -0800 +@@ -83,7 +83,7 @@ foo 0 + after + exit code: 1 + exit code: 1 +-exit code: 1 ++exit code: 255 + exit code: 127 + exit code: 127 + exit code: 127 diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-026.cd_in_rcfile.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-026.cd_in_rcfile.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,26 @@ +# There seems to be problem with bash +# +# $ bash -c 'bash -i i; bash -i i' +# bash -c 'bash -i i; bash -i i' +# bash: i: No such file or directory +# +# [1]+ Stopped bash -c 'bash -i i; bash -i i' +# +# I found out because the tests were stopped in the middle. It was caused by +# having 'cd /somewhere' in my ~/.bashrc. The tests were being stopped in +# read-test, exactly in read2.sub when 'read -t 2 a < /dev/tty' was executed. +# This workaround stops the tests to be stopped in the middle. +# +# reported to bug-bash@gnu.org + +--- tests/execscript 2016-11-28 03:07:12.420018055 -0800 ++++ tests/execscript 2016-11-28 03:03:36.431541831 -0800 +@@ -108,7 +108,7 @@ ${THIS_SH} ./exec6.sub + # checks for properly deciding what constitutes an executable file + ${THIS_SH} ./exec7.sub + +-${THIS_SH} -i ./exec8.sub ++${THIS_SH} --rcfile /dev/null -i ./exec8.sub + + ${THIS_SH} ./exec9.sub + diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-027.bad_file_number_text.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-027.bad_file_number_text.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,64 @@ +# Solaris says 'Bad file number' instead of 'Bad file descriptor' on Linux. +# Make sure the test finds what it expects +# +# Not suitable for upstream + +--- tests/redir.right 2016-11-28 04:38:00.494117081 -0800 ++++ tests/redir.right 2016-11-28 04:36:49.995612525 -0800 +@@ -84,9 +84,9 @@ f () + echo "$line"; + done + } +-./redir5.sub: line 20: read: 5: invalid file descriptor: Bad file descriptor ++./redir5.sub: line 20: read: 5: invalid file descriptor: Bad file number + after read +-./redir5.sub: line 27: read: read error: 0: Bad file descriptor ++./redir5.sub: line 27: read: read error: 0: Bad file number + # tests of ksh93-like dup-and-close redirection operators + / + / +@@ -141,20 +141,20 @@ bix () + foo + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + 1 +-./redir11.sub: line 8: $a: Bad file descriptor +-./redir11.sub: line 9: $(echo $a): Bad file descriptor ++./redir11.sub: line 8: $a: Bad file number ++./redir11.sub: line 9: $(echo $a): Bad file number + 7 + after: 42 +-./redir11.sub: line 24: echo: write error: Bad file descriptor +-./redir11.sub: line 25: echo: write error: Bad file descriptor +-./redir11.sub: line 26: $(a=4 foo): Bad file descriptor +-./redir11.sub: line 27: $(a=4 foo): Bad file descriptor +-./redir11.sub: line 30: $a: Bad file descriptor +-./redir11.sub: line 31: $(echo $a): Bad file descriptor ++./redir11.sub: line 24: echo: write error: Bad file number ++./redir11.sub: line 25: echo: write error: Bad file number ++./redir11.sub: line 26: $(a=4 foo): Bad file number ++./redir11.sub: line 27: $(a=4 foo): Bad file number ++./redir11.sub: line 30: $a: Bad file number ++./redir11.sub: line 31: $(echo $a): Bad file number + ./redir11.sub: line 39: $(ss= declare -i ss): ambiguous redirect + after: 42 + a+=3 + foo + foo +-./redir11.sub: line 53: $(echo $a): Bad file descriptor ++./redir11.sub: line 53: $(echo $a): Bad file number + 123 +--- tests/vredir.right 2016-11-28 04:38:01.014664808 -0800 ++++ tests/vredir.right 2016-11-28 04:36:47.695701154 -0800 +@@ -11,9 +11,9 @@ bar () + ./vredir.tests: line 6: v: readonly variable + ./vredir.tests: line 6: v: cannot assign fd to variable + 42 +-./vredir.tests: line 25: $v: Bad file descriptor +-./vredir.tests: line 26: $v: Bad file descriptor +-./vredir.tests: line 27: $v: Bad file descriptor ++./vredir.tests: line 25: $v: Bad file number ++./vredir.tests: line 26: $v: Bad file number ++./vredir.tests: line 27: $v: Bad file number + bar is a function + bar () + { diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-028.missing_HOME.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-028.missing_HOME.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,17 @@ +# If $HOME is not set (running from cron perhaps), the tests will output: +# 26d25 +# < ./comsub-posix.tests: line 103: cd: HOME not set +# 28d26 +# < ./comsub-posix.tests: line 106: cd: HOME not set +# +# Reported to bug-bash@gnu.org + +--- tests/comsub-posix.tests 2016-11-29 03:41:57.414081235 +0000 ++++ tests/comsub-posix.tests 2016-11-29 03:36:30.425718528 +0000 +@@ -1,4 +1,5 @@ +- ++HOME=${HOME:-/} ++export HOME + # works right + echo ab$(echo mnop)yz + # works right diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-029.undef_SHELL.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-029.undef_SHELL.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,23 @@ +# When SHELL is unset the test fails with +# +# 150,151c150,151 +# < ./redir11.sub: line 26: echo: write error: Bad file number +# < ./redir11.sub: line 27: echo: write error: Bad file number +# --- +# > ./redir11.sub: line 26: $(a=4 foo): Bad file number +# > ./redir11.sub: line 27: $(a=4 foo): Bad file number +# +# Reported to bug-bash@gnu.org, but they can't reproduce. Needs more work on +# our side. + +--- tests/redir.tests 2016-12-01 11:20:04.910983199 +0000 ++++ tests/redir.tests 2016-12-01 11:19:34.114069067 +0000 +@@ -1,7 +1,7 @@ + : ${TMPDIR:=/tmp} + + export LC_ALL=C +-export LANG=C ++export LANG=C; export SHELL= + + # catch-all for remaining untested redirection stuff + set +o posix diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-030.SHOBJ_STATUS_install.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-030.SHOBJ_STATUS_install.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,18 @@ +# If $ac_cv_func_dlopen is not 'yes' a bit earlier, SHOBJ_LIBS remains +# undefiled. Later during 'make install' stage, examples/loadables/Makefile +# calls install-$(SHOBJ_STATUS), and since the target 'install-' is undefined, +# make prints error. +# +# Reported to bug-bash@gnu.org + +--- configure.ac 2016-12-06 05:07:31.808614344 +0000 ++++ configure.ac 2016-12-06 05:07:26.791244255 +0000 +@@ -1151,6 +1151,8 @@ then + AC_SUBST(SHOBJ_LIBS) + AC_SUBST(SHOBJ_STATUS) + AC_MSG_RESULT($SHOBJ_STATUS) ++else ++ SHOBJ_STATUS=unsupported + fi + + # try to create a directory tree if the source is elsewhere diff -r d89b1c5817f5 -r 4758b76d5ad5 components/bash/patches/solaris-031.use_dynamic_temp_file.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/bash/patches/solaris-031.use_dynamic_temp_file.patch Thu Jan 26 12:24:45 2017 +0100 @@ -0,0 +1,27 @@ +# The test new-exp1 used /tmp/x which is too common file to and might be +# already present. The test then fails with: +# +# run-new-exp +# ... +# 171,172c171 +# < ./new-exp1.sub: line 8: /tmp/x: Permission denied +# < rm: cannot remove '/tmp/x': Permission denied +# --- +# > this is test 2 +# +# Reported to bug-bash@gnu.org + +--- tests/new-exp1.sub 2016-12-07 07:06:57.268664317 +0000 ++++ tests/new-exp1.sub 2016-12-07 07:06:13.299361999 +0000 +@@ -5,7 +5,8 @@ expect() + + expect this is a test of proc subst + cat <(echo this is a test of proc subst) +-echo this is test 2 > /tmp/x ++OUTFILE=${BASH_TSTOUT}.new-exp1 ++echo this is test 2 > "$OUTFILE" + expect this is test 2 +-cat <(cat /tmp/x) +-rm -f /tmp/x ++cat <(cat "$OUTFILE") ++rm -f "$OUTFILE"