Michal Nowak
2019-05-21 95adf9b4ceb69a28fbd6168db32835a5ce33f5ea
Update bash 5.0 to patchset 7
4 files added
1 files modified
273 ■■■■■ changed files
components/shell/bash/Makefile 1 ●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash50-004.patch 53 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash50-005.patch 110 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash50-006.patch 47 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash50-007.patch 62 ●●●●● patch | view | raw | blame | history
components/shell/bash/Makefile
@@ -30,6 +30,7 @@
COMPONENT_NAME=        bash
COMPONENT_VERSION=    5.0
COMPONENT_REVISION=    1
COMPONENT_FMRI=        shell/bash
COMPONENT_SUMMARY=    GNU Bourne-Again shell (bash)
COMPONENT_CLASSIFICATION=    System/Shells
components/shell/bash/patches/bash50-004.patch
New file
@@ -0,0 +1,53 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.0
Patch-ID:    bash50-004
Bug-Reported-by:    Daniel Kahn Gillmor <dkg@fifthhorseman.net>
Bug-Reference-ID:    <87lg0g8aiw.fsf@fifthhorseman.net>
Bug-Reference-URL:    http://lists.gnu.org/archive/html/bug-bash/2019-04/msg00076.html
Bug-Description:
In bash-5.0, the `wait' builtin without arguments waits for all children of the
shell. This includes children it `inherited' at shell invocation time. This
patch modifies the behavior to not wait for these inherited children, some
of which might be long-lived.
Patch (apply with `patch -p0'):
*** ../bash-5.0-patched/jobs.c    2018-12-06 11:44:34.000000000 -0500
--- jobs.c    2019-04-12 15:15:10.000000000 -0400
***************
*** 2489,2496 ****
    wait_procsubs ();
    reap_procsubs ();
! #if 1
    /* We don't want to wait indefinitely if we have stopped children. */
-   /* XXX - should add a loop that goes through the list of process
-      substitutions and waits for each proc in turn before this code. */
    if (any_stopped == 0)
      {
--- 2490,2495 ----
    wait_procsubs ();
    reap_procsubs ();
! #if 0
    /* We don't want to wait indefinitely if we have stopped children. */
    if (any_stopped == 0)
      {
*** ../bash-5.0/patchlevel.h    2016-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 3
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash50-005.patch
New file
@@ -0,0 +1,110 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.0
Patch-ID:    bash50-005
Bug-Reported-by:    Brad Spencer <bspencer@blackberry.com>
Bug-Reference-ID:    <1b993ff2-ce4f-662a-6be4-393457362e47@blackberry.com>
Bug-Reference-URL:    http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00250.html
Bug-Description:
In certain cases, bash optimizes out a fork() call too early and prevents
traps from running.
Patch (apply with `patch -p0'):
*** ../bash-5.0-patched/command.h    2018-07-20 21:16:31.000000000 -0400
--- command.h    2019-02-20 11:09:36.000000000 -0500
***************
*** 187,190 ****
--- 188,192 ----
  #define CMD_LASTPIPE        0x2000
  #define CMD_STDPATH        0x4000    /* use standard path for command lookup */
+ #define CMD_TRY_OPTIMIZING  0x8000    /* try to optimize this simple command */
  /* What a command looks like. */
*** ../bash-5.0-patched/builtins/evalstring.c    2018-12-26 11:19:21.000000000 -0500
--- builtins/evalstring.c    2019-01-29 14:15:19.000000000 -0500
***************
*** 101,104 ****
--- 101,113 ----
  }
+ int
+ can_optimize_connection (command)
+      COMMAND *command;
+ {
+   return (*bash_input.location.string == '\0' &&
+       (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
+       command->value.Connection->second->type == cm_simple);
+ }
+
  void
  optimize_fork (command)
***************
*** 106,110 ****
  {
    if (command->type == cm_connection &&
!       (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR) &&
        should_suppress_fork (command->value.Connection->second))
      {
--- 115,120 ----
  {
    if (command->type == cm_connection &&
!       (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
!       (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) &&
        should_suppress_fork (command->value.Connection->second))
      {
***************
*** 413,418 ****
            command->value.Simple->flags |= CMD_NO_FORK;
          }
!           else if (command->type == cm_connection)
!         optimize_fork (command);
  #endif /* ONESHOT */
--- 423,438 ----
            command->value.Simple->flags |= CMD_NO_FORK;
          }
!
!           /* Can't optimize forks out here execept for simple commands.
!          This knows that the parser sets up commands as left-side heavy
!          (&& and || are left-associative) and after the single parse,
!          if we are at the end of the command string, the last in a
!          series of connection commands is
!          command->value.Connection->second. */
!           else if (command->type == cm_connection && can_optimize_connection (command))
!         {
!           command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING;
!           command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING;
!         }
  #endif /* ONESHOT */
*** ../bash-5.0-patched/execute_cmd.c    2018-12-05 09:05:14.000000000 -0500
--- execute_cmd.c    2019-01-25 15:59:00.000000000 -0500
***************
*** 2768,2771 ****
--- 2768,2773 ----
         (exec_result != EXECUTION_SUCCESS)))
      {
+       optimize_fork (command);
+
        second = command->value.Connection->second;
        if (ignore_return && second)
*** ../bash-5.0/patchlevel.h    2016-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash50-006.patch
New file
@@ -0,0 +1,47 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.0
Patch-ID:    bash50-006
Bug-Reported-by:    Tomas Mozes <hydrapolic@gmail.com>
Bug-Reference-ID:    <CAG6MAzQumLU2vhnmr1UrYAUQAFW5Yo8hfM_sEibX9RJQWJkRrA@mail.gmail.com>
Bug-Reference-URL:    http://lists.gnu.org/archive/html/bug-bash/2019-03/msg00037.html
Bug-Description:
Bash-5.0 did not build successfully if SYSLOG_HISTORY was defined without
also defining SYSLOG_SHOPT.
Patch (apply with `patch -p0'):
*** ../bash-5.0-patched/builtins/shopt.def    2018-10-05 14:49:02.000000000 -0400
--- builtins/shopt.def    2019-01-23 09:55:22.000000000 -0500
***************
*** 123,127 ****
  #endif
! #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
  extern int syslog_history;
  #endif
--- 123,127 ----
  #endif
! #if defined (SYSLOG_HISTORY)
  extern int syslog_history;
  #endif
*** ../bash-5.0/patchlevel.h    2016-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash50-007.patch
New file
@@ -0,0 +1,62 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.0
Patch-ID:    bash50-007
Bug-Reported-by:    Grisha Levit <grishalevit@gmail.com>
Bug-Reference-ID:    <CAMu=BroHapG1AS3xB5SQaCX2XKu=-E2Ob9uW6LNuHvd=YohrDw@mail.gmail.com>
Bug-Reference-URL:    http://lists.gnu.org/archive/html/bug-bash/2019-02/msg00067.html
Bug-Description:
Running `exec' when job control was disabled, even temporarily, but after it
had been initialized, could leave the terminal in the wrong process group for
the executed process.
Patch (apply with `patch -p0'):
*** ../bash-5.0-patched/jobs.c    2018-12-06 11:44:34.000000000 -0500
--- jobs.c    2019-04-12 15:15:10.000000000 -0400
***************
*** 4838,4850 ****
  {
    if (job_control)
!     {
!       terminate_stopped_jobs ();
!       if (original_pgrp >= 0)
!     give_terminal_to (original_pgrp, 1);
!     }
!   if (original_pgrp >= 0)
!     setpgid (0, original_pgrp);
  }
--- 4838,4848 ----
  {
    if (job_control)
!     terminate_stopped_jobs ();
!   if (original_pgrp >= 0 && terminal_pgrp != original_pgrp)
!     give_terminal_to (original_pgrp, 1);
!   if (original_pgrp >= 0 && setpgid (0, original_pgrp) == 0)
!     shell_pgrp = original_pgrp;
  }
*** ../bash-5.0/patchlevel.h    2016-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 7
  #endif /* _PATCHLEVEL_H_ */