components/shell/bash/Makefile | ●●●●● patch | view | raw | blame | history | |
components/shell/bash/patches/bash50-004.patch | ●●●●● patch | view | raw | blame | history | |
components/shell/bash/patches/bash50-005.patch | ●●●●● patch | view | raw | blame | history | |
components/shell/bash/patches/bash50-006.patch | ●●●●● patch | view | raw | blame | history | |
components/shell/bash/patches/bash50-007.patch | ●●●●● 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_ */