Bash-5.1 Official patch 1
BASH PATCH REPORT = Bash-Release: 5.1 Patch-ID: bash51-001 Bug-Reported-by:Fazal Majid Bug-Reference-ID: Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg0.html Bug-Description: There is a missing dependency on a constructed file, which can cause highly parellel builds to fail. Patch (apply with `patch -p0'): *** ../bash-5.1-patched/Makefile.in 2020-12-04 09:51:19.0 -0500 --- Makefile.in 2020-12-16 11:28:36.0 -0500 *** *** 1316,1319 --- 1316,1320 bashline.o: pcomplete.h ${BASHINCDIR}/chartypes.h input.h bashline.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h + bashline.o: ${DEFDIR}/builtext.h bracecomp.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bracecomp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h *** *** 1436,1439 --- 1437,1441 builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h + builtins/evalstring.o: ${DEFDIR}/builtext.h builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h xmalloc.h error.h *** ../bash-5.1-patched/builtins/Makefile.in2019-07-25 08:03:45.0 -0400 --- builtins/Makefile.in2020-12-16 11:29:29.0 -0500 *** *** 362,366 evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h ! evalstring.o: $(topdir)/trap.h $(topdir)/redir.h ../pathnames.h #evalstring.o: $(topdir)/y.tab.h getopt.o: ../config.h $(BASHINCDIR)/memalloc.h --- 362,366 evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h ! evalstring.o: $(topdir)/trap.h $(topdir)/redir.h ../pathnames.h ./builtext.h #evalstring.o: $(topdir)/y.tab.h getopt.o: ../config.h $(BASHINCDIR)/memalloc.h *** ../bash-5.1/patchlevel.h2020-06-22 14:51:03.0 -0400 --- patchlevel.h2020-10-01 11:01:28.0 -0400 *** *** 1,5 /* patchlevel.h -- current bash patch level */ ! /* Copyright (C) 2001-2016 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. --- 1,5 /* patchlevel.h -- current bash patch level */ ! /* Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. *** *** 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_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Bash-5.1 Official patch 2
BASH PATCH REPORT = Bash-Release: 5.1 Patch-ID: bash51-002 Bug-Reported-by:oguzismailuy...@gmail.com Bug-Reference-ID: Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00037.html Bug-Description: If there are no jobs, and the `-n' and `-p' options are both supplied to `wait', bash can assign a value to the variable name specified with `-p' instead of leaving it unset. Patch (apply with `patch -p0'): *** ../bash-5.1-patched/builtins/wait.def 2020-04-09 15:13:57.0 -0400 --- builtins/wait.def 2020-12-11 09:46:49.0 -0500 *** *** 214,222 status = wait_for_any_job (wflags, &pstat); - if (status < 0) - status = 127; - if (vname && status >= 0) bind_var_to_int (vname, pstat.pid); if (list) unset_waitlist (); --- 214,222 status = wait_for_any_job (wflags, &pstat); if (vname && status >= 0) bind_var_to_int (vname, pstat.pid); + + if (status < 0) + status = 127; if (list) unset_waitlist (); *** ../bash-5.1/patchlevel.h2020-06-22 14:51:03.0 -0400 --- patchlevel.h2020-10-01 11:01:28.0 -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_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Bash-5.1 Official patch 3
BASH PATCH REPORT = Bash-Release: 5.1 Patch-ID: bash51-003 Bug-Reported-by:oguzismailuy...@gmail.com Bug-Reference-ID: Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00050.html Bug-Description: Bash does not put a command substitution process that is started to perform an expansion in a child process into the right process group where it can receive keyboard-generated signals. Patch (apply with `patch -p0'): *** ../bash-5.1-patched/subst.c 2020-11-16 10:33:15.0 -0500 --- subst.c 2020-12-12 13:50:11.0 -0500 *** *** 6357,6362 #if defined (JOB_CONTROL) old_pipeline_pgrp = pipeline_pgrp; ! /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline. */ ! if ((subshell_environment & SUBSHELL_PIPE) == 0) pipeline_pgrp = shell_pgrp; cleanup_the_pipeline (); --- 6357,6364 #if defined (JOB_CONTROL) old_pipeline_pgrp = pipeline_pgrp; ! /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline or ! we've already forked to run a disk command (and are expanding redirections, ! for example). */ ! if ((subshell_environment & (SUBSHELL_FORK|SUBSHELL_PIPE)) == 0) pipeline_pgrp = shell_pgrp; cleanup_the_pipeline (); *** ../bash-5.1/patchlevel.h2020-06-22 14:51:03.0 -0400 --- patchlevel.h2020-10-01 11:01:28.0 -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_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Bash-5.1 Official patch 4
BASH PATCH REPORT = Bash-Release: 5.1 Patch-ID: bash51-004 Bug-Reported-by:oguzismailuy...@gmail.com Bug-Reference-ID: Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00039.html Bug-Description: If a key-value compound array assignment to an associative array is supplied as an assignment statement argument to the `declare' command that declares the array, the assignment doesn't perform the correct word expansions. This patch makes key-value assignment and subscript assignment perform the same expansions when they're supplied as an argument to `declare'. Patch (apply with `patch -p0'): *** ../bash-5.1-patched/arrayfunc.c 2020-10-09 11:38:58.0 -0400 --- arrayfunc.c 2020-12-11 15:12:22.0 -0500 *** *** 598,601 --- 598,622 } } + + /* Return non-zero if L appears to be a key-value pair associative array +compound assignment. */ + int + kvpair_assignment_p (l) + WORD_LIST *l; + { + return (l && (l->word->flags & W_ASSIGNMENT) == 0 && l->word->word[0] != '['); /*]*/ + } + + char * + expand_and_quote_kvpair_word (w) + char *w; + { + char *t, *r; + + t = w ? expand_assignment_string_to_string (w, 0) : 0; + r = sh_single_quote (t ? t : ""); + free (t); + return r; + } #endif *** *** 641,645 #if ASSOC_KVPAIR_ASSIGNMENT ! if (assoc_p (var) && nlist && (nlist->word->flags & W_ASSIGNMENT) == 0 && nlist->word->word[0] != '[') /*]*/ { iflags = flags & ~ASS_APPEND; --- 662,666 #if ASSOC_KVPAIR_ASSIGNMENT ! if (assoc_p (var) && kvpair_assignment_p (nlist)) { iflags = flags & ~ASS_APPEND; *** ../bash-5.1-patched/arrayfunc.h 2020-04-29 17:24:15.0 -0400 --- arrayfunc.h 2020-12-11 14:23:50.0 -0500 *** *** 68,71 --- 68,74 extern void quote_compound_array_list PARAMS((WORD_LIST *, int)); + extern int kvpair_assignment_p PARAMS((WORD_LIST *)); + extern char *expand_and_quote_kvpair_word PARAMS((char *)); + extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int)); extern int skipsubscript PARAMS((const char *, int, int)); *** ../bash-5.1-patched/subst.c 2020-11-16 10:33:15.0 -0500 --- subst.c 2020-12-11 15:11:10.0 -0500 *** *** 11605,11608 --- 11605,11609 WORD_LIST *l, *nl; char *t; + int kvpair; if (flags == 0) *** *** 11619,11622 --- 11620,11627 /* Associative array */ l = parse_string_to_word_list (value, 1, "array assign"); + #if ASSOC_KVPAIR_ASSIGNMENT + kvpair = kvpair_assignment_p (l); + #endif + /* For associative arrays, with their arbitrary subscripts, we have to expand and quote in one step so we don't have to search for the *** *** 11624,11627 --- 11629,11638 for (nl = l; nl; nl = nl->next) { + #if ASSOC_KVPAIR_ASSIGNMENT + if (kvpair) + /* keys and values undergo the same set of expansions */ + t = expand_and_quote_kvpair_word (nl->word->word); + else + #endif if ((nl->word->flags & W_ASSIGNMENT) == 0) t = sh_single_quote (nl->word->word ? nl->word->word : ""); *** ../bash-5.1/patchlevel.h2020-06-22 14:51:03.0 -0400 --- patchlevel.h2020-10-01 11:01:28.0 -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_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Is there a way to force here-documents/strings to use temporary files?
Before Bash-5.1 I used to be able to do things like this and get consistent results: $ { grep -x -m1 1; grep -x 2; } <<<`seq 3` 1 2 $ { grep -x -m1 1; grep -x 2; } <<<`seq 3` 1 2 But now, since here-documents use pipes when the expanded document is smaller than the pipe buffer size, grep can't position stdin and this doesn't work consistently anymore. See: $ echo $BASH_VERSION 5.1.0(18)-maint $ $ { grep -x -m1 1; grep -x 2; } <<< `seq 3` 1 $ { grep -x -m1 1; grep -x 2; } <<< `seq 3` 1 2 So, is there any way to force here-documents to use temporary files no matter how long the expanded document is? If not, it would be nice if compat50 had this effect. Oğuz