Bash-5.1 Official patch 1

2020-12-19 Thread Chet Ramey
 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

2020-12-19 Thread Chet Ramey
 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

2020-12-19 Thread Chet Ramey
 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

2020-12-19 Thread Chet Ramey
 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?

2020-12-19 Thread Oğuz
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