26 changed files with 281 additions and 1739 deletions
@ -1,60 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-001 |
|||
|
|||
Bug-Reported-by: Sean Zha <freeman_cha@hotmail.com> |
|||
Bug-Reference-ID: <BN3PR01MB13657D9303EB94BF6E54216E8CCA0@BN3PR01MB1365.prod.exchangelabs.com> |
|||
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_ */ |
@ -1,69 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-002 |
|||
|
|||
Bug-Reported-by: Eric Pruitt <eric.pruitt@gmail.com> |
|||
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_ */ |
@ -1,58 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-003 |
|||
|
|||
Bug-Reported-by: op7ic \x00 <op7ica@gmail.com> |
|||
Bug-Reference-ID: <CAFHyJTopWC5Jx+U7WcvxSZKu+KrqSf+_3sHPiRWo=VzXSiPq=w@mail.gmail.com> |
|||
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_ */ |
@ -1,84 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-004 |
|||
|
|||
Bug-Reported-by: Christian Weisgerber <naddy@mips.inka.de> |
|||
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_ */ |
@ -1,47 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-005 |
|||
|
|||
Bug-Reported-by: Dr. Werner Fink <werner@suse.de> |
|||
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_ */ |
@ -1,59 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-006 |
|||
|
|||
Bug-Reported-by: <fernando@null-life.com> |
|||
Bug-Reference-ID: <CAEr-gPFPvqheiAeENmMkEwWRd4U=1iqCsYmR3sLdULOqL++_tQ@mail.gmail.com> |
|||
Bug-Reference-URL: |
|||
|
|||
Bug-Description: |
|||
|
|||
Out-of-range negative offsets to popd can cause the shell to crash attempting |
|||
to free an invalid memory block. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/builtins/pushd.def 2016-01-25 13:31:49.000000000 -0500 |
|||
--- builtins/pushd.def 2016-10-28 10:46:49.000000000 -0400 |
|||
*************** |
|||
*** 366,370 **** |
|||
} |
|||
|
|||
! if (which > directory_list_offset || (directory_list_offset == 0 && which == 0)) |
|||
{ |
|||
pushd_error (directory_list_offset, which_word ? which_word : ""); |
|||
--- 366,370 ---- |
|||
} |
|||
|
|||
! if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0)) |
|||
{ |
|||
pushd_error (directory_list_offset, which_word ? which_word : ""); |
|||
*************** |
|||
*** 388,391 **** |
|||
--- 388,396 ---- |
|||
of the list into place. */ |
|||
i = (direction == '+') ? directory_list_offset - which : which; |
|||
+ if (i < 0 || i > directory_list_offset) |
|||
+ { |
|||
+ pushd_error (directory_list_offset, which_word ? which_word : ""); |
|||
+ return (EXECUTION_FAILURE); |
|||
+ } |
|||
free (pushd_directory_list[i]); |
|||
directory_list_offset--; |
|||
*** ../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 5 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 6 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,151 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-007 |
|||
|
|||
Bug-Reported-by: Jens Heyens <jens.heyens@cispa.saarland> |
|||
Bug-Reference-ID: |
|||
Bug-Reference-URL: https://savannah.gnu.org/support/?109224 |
|||
|
|||
Bug-Description: |
|||
|
|||
When performing filename completion, bash dequotes the directory name being |
|||
completed, which can result in match failures and potential unwanted |
|||
expansion. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/bashline.c 2016-08-05 21:44:05.000000000 -0400 |
|||
--- bashline.c 2017-01-19 13:15:51.000000000 -0500 |
|||
*************** |
|||
*** 143,147 **** |
|||
static void restore_directory_hook __P((rl_icppfunc_t)); |
|||
|
|||
! static int directory_exists __P((const char *)); |
|||
|
|||
static void cleanup_expansion_error __P((void)); |
|||
--- 144,148 ---- |
|||
static void restore_directory_hook __P((rl_icppfunc_t)); |
|||
|
|||
! static int directory_exists __P((const char *, int)); |
|||
|
|||
static void cleanup_expansion_error __P((void)); |
|||
*************** |
|||
*** 3103,3111 **** |
|||
} |
|||
|
|||
! /* Check whether not the (dequoted) version of DIRNAME, with any trailing slash |
|||
! removed, exists. */ |
|||
static int |
|||
! directory_exists (dirname) |
|||
const char *dirname; |
|||
{ |
|||
char *new_dirname; |
|||
--- 3107,3116 ---- |
|||
} |
|||
|
|||
! /* Check whether not DIRNAME, with any trailing slash removed, exists. If |
|||
! SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */ |
|||
static int |
|||
! directory_exists (dirname, should_dequote) |
|||
const char *dirname; |
|||
+ int should_dequote; |
|||
{ |
|||
char *new_dirname; |
|||
*************** |
|||
*** 3113,3118 **** |
|||
struct stat sb; |
|||
|
|||
! /* First, dequote the directory name */ |
|||
! new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character); |
|||
dirlen = STRLEN (new_dirname); |
|||
if (new_dirname[dirlen - 1] == '/') |
|||
--- 3118,3124 ---- |
|||
struct stat sb; |
|||
|
|||
! /* We save the string and chop the trailing slash because stat/lstat behave |
|||
! inconsistently if one is present. */ |
|||
! new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname); |
|||
dirlen = STRLEN (new_dirname); |
|||
if (new_dirname[dirlen - 1] == '/') |
|||
*************** |
|||
*** 3146,3150 **** |
|||
should_expand_dirname = '`'; |
|||
|
|||
! if (should_expand_dirname && directory_exists (local_dirname)) |
|||
should_expand_dirname = 0; |
|||
|
|||
--- 3152,3156 ---- |
|||
should_expand_dirname = '`'; |
|||
|
|||
! if (should_expand_dirname && directory_exists (local_dirname, 0)) |
|||
should_expand_dirname = 0; |
|||
|
|||
*************** |
|||
*** 3156,3160 **** |
|||
global_nounset = unbound_vars_is_error; |
|||
unbound_vars_is_error = 0; |
|||
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ |
|||
unbound_vars_is_error = global_nounset; |
|||
if (wl) |
|||
--- 3162,3166 ---- |
|||
global_nounset = unbound_vars_is_error; |
|||
unbound_vars_is_error = 0; |
|||
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ |
|||
unbound_vars_is_error = global_nounset; |
|||
if (wl) |
|||
*************** |
|||
*** 3245,3249 **** |
|||
} |
|||
|
|||
! if (should_expand_dirname && directory_exists (local_dirname)) |
|||
should_expand_dirname = 0; |
|||
|
|||
--- 3262,3266 ---- |
|||
} |
|||
|
|||
! if (should_expand_dirname && directory_exists (local_dirname, 1)) |
|||
should_expand_dirname = 0; |
|||
|
|||
*************** |
|||
*** 3251,3255 **** |
|||
{ |
|||
new_dirname = savestring (local_dirname); |
|||
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ |
|||
if (wl) |
|||
{ |
|||
--- 3268,3272 ---- |
|||
{ |
|||
new_dirname = savestring (local_dirname); |
|||
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ |
|||
if (wl) |
|||
{ |
|||
*** ../bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400 |
|||
--- subst.c 2017-01-19 07:09:57.000000000 -0500 |
|||
*************** |
|||
*** 9459,9462 **** |
|||
--- 9459,9466 ---- |
|||
if (word->flags & W_COMPLETE) |
|||
tword->flags |= W_COMPLETE; /* for command substitutions */ |
|||
+ if (word->flags & W_NOCOMSUB) |
|||
+ tword->flags |= W_NOCOMSUB; |
|||
+ if (word->flags & W_NOPROCSUB) |
|||
+ tword->flags |= W_NOPROCSUB; |
|||
|
|||
temp = (char *)NULL; |
|||
*** ../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 6 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 7 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,84 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-008 |
|||
|
|||
Bug-Reported-by: Koichi MURASE <myoga.murase@gmail.com> |
|||
Bug-Reference-ID: <CAFLRLk-V+1AeQ2k=pY7ih6V+MfQ_w8EF3YWL2E+wmLfgKBtzXA@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00050.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Under certain circumstances, bash will evaluate arithmetic expressions as |
|||
part of reading an expression token even when evaluation is suppressed. This |
|||
happens while evaluating a conditional expression and skipping over the |
|||
failed branch of the expression. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/expr.c 2015-10-11 14:46:36.000000000 -0400 |
|||
--- expr.c 2016-11-08 11:55:46.000000000 -0500 |
|||
*************** |
|||
*** 579,585 **** |
|||
if (curtok == QUES) /* found conditional expr */ |
|||
{ |
|||
- readtok (); |
|||
- if (curtok == 0 || curtok == COL) |
|||
- evalerror (_("expression expected")); |
|||
if (cval == 0) |
|||
{ |
|||
--- 579,582 ---- |
|||
*************** |
|||
*** 588,591 **** |
|||
--- 585,592 ---- |
|||
} |
|||
|
|||
+ readtok (); |
|||
+ if (curtok == 0 || curtok == COL) |
|||
+ evalerror (_("expression expected")); |
|||
+ |
|||
val1 = EXP_HIGHEST (); |
|||
|
|||
*************** |
|||
*** 594,600 **** |
|||
if (curtok != COL) |
|||
evalerror (_("`:' expected for conditional expression")); |
|||
! readtok (); |
|||
! if (curtok == 0) |
|||
! evalerror (_("expression expected")); |
|||
set_noeval = 0; |
|||
if (cval) |
|||
--- 595,599 ---- |
|||
if (curtok != COL) |
|||
evalerror (_("`:' expected for conditional expression")); |
|||
! |
|||
set_noeval = 0; |
|||
if (cval) |
|||
*************** |
|||
*** 604,608 **** |
|||
--- 603,611 ---- |
|||
} |
|||
|
|||
+ readtok (); |
|||
+ if (curtok == 0) |
|||
+ evalerror (_("expression expected")); |
|||
val2 = expcond (); |
|||
+ |
|||
if (set_noeval) |
|||
noeval--; |
|||
*** ../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 7 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 8 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,107 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-009 |
|||
|
|||
Bug-Reported-by: Hong Cho <hong.cho@citrix.com> |
|||
Bug-Reference-ID: <c30b5fe62b2543af8297e47ca487c29c@SJCPEX02CL02.citrite.net> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-12/msg00043.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There is a race condition in add_history() that can be triggered by a fatal |
|||
signal arriving between the time the history length is updated and the time |
|||
the history list update is completed. A later attempt to reference an |
|||
invalid history entry can cause a crash. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/lib/readline/history.c 2016-11-11 13:42:49.000000000 -0500 |
|||
--- lib/readline/history.c 2016-12-05 10:37:51.000000000 -0500 |
|||
*************** |
|||
*** 280,283 **** |
|||
--- 280,284 ---- |
|||
{ |
|||
HIST_ENTRY *temp; |
|||
+ int new_length; |
|||
|
|||
if (history_stifled && (history_length == history_max_entries)) |
|||
*************** |
|||
*** 296,306 **** |
|||
/* Copy the rest of the entries, moving down one slot. Copy includes |
|||
trailing NULL. */ |
|||
- #if 0 |
|||
- for (i = 0; i < history_length; i++) |
|||
- the_history[i] = the_history[i + 1]; |
|||
- #else |
|||
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); |
|||
- #endif |
|||
|
|||
history_base++; |
|||
} |
|||
--- 297,303 ---- |
|||
/* Copy the rest of the entries, moving down one slot. Copy includes |
|||
trailing NULL. */ |
|||
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); |
|||
|
|||
+ new_length = history_length; |
|||
history_base++; |
|||
} |
|||
*************** |
|||
*** 316,320 **** |
|||
history_size = DEFAULT_HISTORY_INITIAL_SIZE; |
|||
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); |
|||
! history_length = 1; |
|||
} |
|||
else |
|||
--- 313,317 ---- |
|||
history_size = DEFAULT_HISTORY_INITIAL_SIZE; |
|||
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); |
|||
! new_length = 1; |
|||
} |
|||
else |
|||
*************** |
|||
*** 326,330 **** |
|||
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); |
|||
} |
|||
! history_length++; |
|||
} |
|||
} |
|||
--- 323,327 ---- |
|||
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); |
|||
} |
|||
! new_length = history_length + 1; |
|||
} |
|||
} |
|||
*************** |
|||
*** 332,337 **** |
|||
temp = alloc_history_entry ((char *)string, hist_inittime ()); |
|||
|
|||
! the_history[history_length] = (HIST_ENTRY *)NULL; |
|||
! the_history[history_length - 1] = temp; |
|||
} |
|||
|
|||
--- 329,335 ---- |
|||
temp = alloc_history_entry ((char *)string, hist_inittime ()); |
|||
|
|||
! the_history[new_length] = (HIST_ENTRY *)NULL; |
|||
! the_history[new_length - 1] = temp; |
|||
! history_length = new_length; |
|||
} |
|||
|
|||
*** ../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 8 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 9 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,49 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-010 |
|||
|
|||
Bug-Reported-by: Clark Wang <dearvoid@gmail.com> |
|||
Bug-Reference-ID: <CADv8-og092RvvUUHy46=BPKChCXw5g=GOOqgN0V3f4a3TpLebQ@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00104.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Depending on compiler optimizations and behavior, the `read' builtin may not |
|||
save partial input when a timeout occurs. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/builtins/read.def 2016-05-16 14:24:56.000000000 -0400 |
|||
--- builtins/read.def 2016-11-25 12:37:56.000000000 -0500 |
|||
*************** |
|||
*** 182,186 **** |
|||
{ |
|||
register char *varname; |
|||
! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; |
|||
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; |
|||
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno; |
|||
--- 182,187 ---- |
|||
{ |
|||
register char *varname; |
|||
! int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; |
|||
! volatile int i; |
|||
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; |
|||
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno; |
|||
|
|||
*** ../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 9 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 10 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,50 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-011 |
|||
|
|||
Bug-Reported-by: Russell King <rmk@armlinux.org.uk> |
|||
Bug-Reference-ID: <E1cNnFx-0007G2-S2@flint.armlinux.org.uk> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-01/msg00000.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Subshells begun to run command and process substitutions may attempt to |
|||
set the terminal's process group to an incorrect value if they receive |
|||
a fatal signal. This depends on the behavior of the process that starts |
|||
the shell. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/sig.c 2016-02-11 15:02:45.000000000 -0500 |
|||
--- sig.c 2017-01-04 09:09:47.000000000 -0500 |
|||
*************** |
|||
*** 586,590 **** |
|||
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) |
|||
hangup_all_jobs (); |
|||
! end_job_control (); |
|||
#endif /* JOB_CONTROL */ |
|||
|
|||
--- 571,576 ---- |
|||
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) |
|||
hangup_all_jobs (); |
|||
! if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0) |
|||
! end_job_control (); |
|||
#endif /* JOB_CONTROL */ |
|||
|
|||
*** ../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 10 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 11 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,161 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-012 |
|||
|
|||
Bug-Reported-by: Clark Wang <dearvoid@gmail.com> |
|||
Bug-Reference-ID: <CADv8-ojttPUFOZXqbjsvy83LfaJtQKZ5qejGdF6j0VJ3vtrYOA@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00106.html |
|||
|
|||
Bug-Description: |
|||
|
|||
When -N is used, the input is not supposed to be split using $IFS, but |
|||
leading and trailing IFS whitespace was still removed. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/subst.c 2017-01-20 14:22:01.000000000 -0500 |
|||
--- subst.c 2017-01-25 13:43:22.000000000 -0500 |
|||
*************** |
|||
*** 2826,2834 **** |
|||
/* Parse a single word from STRING, using SEPARATORS to separate fields. |
|||
ENDPTR is set to the first character after the word. This is used by |
|||
! the `read' builtin. This is never called with SEPARATORS != $IFS; |
|||
! it should be simplified. |
|||
|
|||
XXX - this function is very similar to list_string; they should be |
|||
combined - XXX */ |
|||
char * |
|||
get_word_from_string (stringp, separators, endptr) |
|||
--- 2826,2838 ---- |
|||
/* Parse a single word from STRING, using SEPARATORS to separate fields. |
|||
ENDPTR is set to the first character after the word. This is used by |
|||
! the `read' builtin. |
|||
! |
|||
! This is never called with SEPARATORS != $IFS, and takes advantage of that. |
|||
|
|||
XXX - this function is very similar to list_string; they should be |
|||
combined - XXX */ |
|||
+ |
|||
+ #define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0) |
|||
+ |
|||
char * |
|||
get_word_from_string (stringp, separators, endptr) |
|||
*************** |
|||
*** 2838,2841 **** |
|||
--- 2842,2846 ---- |
|||
char *current_word; |
|||
int sindex, sh_style_split, whitesep, xflags; |
|||
+ unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */ |
|||
size_t slen; |
|||
|
|||
*************** |
|||
*** 2847,2854 **** |
|||
separators[2] == '\n' && |
|||
separators[3] == '\0'; |
|||
! for (xflags = 0, s = ifs_value; s && *s; s++) |
|||
{ |
|||
if (*s == CTLESC) xflags |= SX_NOCTLESC; |
|||
if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL; |
|||
} |
|||
|
|||
--- 2852,2861 ---- |
|||
separators[2] == '\n' && |
|||
separators[3] == '\0'; |
|||
! memset (local_cmap, '\0', sizeof (local_cmap)); |
|||
! for (xflags = 0, s = separators; s && *s; s++) |
|||
{ |
|||
if (*s == CTLESC) xflags |= SX_NOCTLESC; |
|||
if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL; |
|||
+ local_cmap[(unsigned char)*s] = 1; /* local charmap of separators */ |
|||
} |
|||
|
|||
*************** |
|||
*** 2857,2864 **** |
|||
|
|||
/* Remove sequences of whitespace at the beginning of STRING, as |
|||
! long as those characters appear in IFS. */ |
|||
! if (sh_style_split || !separators || !*separators) |
|||
{ |
|||
! for (; *s && spctabnl (*s) && isifs (*s); s++); |
|||
|
|||
/* If the string is nothing but whitespace, update it and return. */ |
|||
--- 2864,2872 ---- |
|||
|
|||
/* Remove sequences of whitespace at the beginning of STRING, as |
|||
! long as those characters appear in SEPARATORS. This happens if |
|||
! SEPARATORS == $' \t\n' or if IFS is unset. */ |
|||
! if (sh_style_split || separators == 0) |
|||
{ |
|||
! for (; *s && spctabnl (*s) && islocalsep (*s); s++); |
|||
|
|||
/* If the string is nothing but whitespace, update it and return. */ |
|||
*************** |
|||
*** 2879,2885 **** |
|||
This obeys the field splitting rules in Posix.2. */ |
|||
sindex = 0; |
|||
! /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim |
|||
! unless multibyte chars are possible. */ |
|||
! slen = (MB_CUR_MAX > 1) ? STRLEN (s) : 1; |
|||
current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags); |
|||
|
|||
--- 2887,2893 ---- |
|||
This obeys the field splitting rules in Posix.2. */ |
|||
sindex = 0; |
|||
! /* Don't need string length in ADVANCE_CHAR unless multibyte chars are |
|||
! possible, but need it in string_extract_verbatim for bounds checking */ |
|||
! slen = STRLEN (s); |
|||
current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags); |
|||
|
|||
*************** |
|||
*** 2900,2904 **** |
|||
/* Now skip sequences of space, tab, or newline characters if they are |
|||
in the list of separators. */ |
|||
! while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) |
|||
sindex++; |
|||
|
|||
--- 2908,2912 ---- |
|||
/* Now skip sequences of space, tab, or newline characters if they are |
|||
in the list of separators. */ |
|||
! while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex])) |
|||
sindex++; |
|||
|
|||
*************** |
|||
*** 2907,2916 **** |
|||
delimiter, not a separate delimiter that would result in an empty field. |
|||
Look at POSIX.2, 3.6.5, (3)(b). */ |
|||
! if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex])) |
|||
{ |
|||
sindex++; |
|||
/* An IFS character that is not IFS white space, along with any adjacent |
|||
IFS white space, shall delimit a field. */ |
|||
! while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) |
|||
sindex++; |
|||
} |
|||
--- 2915,2924 ---- |
|||
delimiter, not a separate delimiter that would result in an empty field. |
|||
Look at POSIX.2, 3.6.5, (3)(b). */ |
|||
! if (s[sindex] && whitesep && islocalsep (s[sindex]) && !spctabnl (s[sindex])) |
|||
{ |
|||
sindex++; |
|||
/* An IFS character that is not IFS white space, along with any adjacent |
|||
IFS white space, shall delimit a field. */ |
|||
! while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex])) |
|||
sindex++; |
|||
} |
|||
*** ../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 11 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 12 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,43 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-013 |
|||
|
|||
Bug-Reported-by: Siteshwar Vashisht <svashisht@redhat.com> |
|||
Bug-Reference-ID: <1508861265.9523642.1484659442561.JavaMail.zimbra@redhat.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-01/msg00026.html |
|||
|
|||
Bug-Description: |
|||
|
|||
If a here-document contains a command substitution, the command substitution |
|||
can get access to the file descriptor used to write the here-document. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/redir.c 2016-06-02 20:22:24.000000000 -0400 |
|||
--- redir.c 2017-01-17 13:23:40.000000000 -0500 |
|||
*************** |
|||
*** 470,473 **** |
|||
--- 467,472 ---- |
|||
} |
|||
|
|||
+ SET_CLOSE_ON_EXEC (fd); |
|||
+ |
|||
errno = r = 0; /* XXX */ |
|||
/* write_here_document returns 0 on success, errno on failure. */ |
|||
*** ../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 12 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 13 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,104 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-014 |
|||
|
|||
Bug-Reported-by: Oyvind Hvidsten <oyvind.hvidsten@dhampir.no> |
|||
Bug-Reference-ID: <c01b7049-925c-9409-d978-e59bf42591f4@dhampir.no> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-12/msg00023.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Under some circumstances, functions that return via the `return' builtin do |
|||
not clean up memory they allocated to keep track of FIFOs. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20171205/execute_cmd.c 2017-12-08 07:38:28.000000000 -0500 |
|||
--- execute_cmd.c 2018-01-26 15:23:38.000000000 -0500 |
|||
*************** |
|||
*** 727,730 **** |
|||
--- 727,732 ---- |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list ((int *)&osize); |
|||
+ begin_unwind_frame ("internal_fifos"); |
|||
+ add_unwind_protect (xfree, ofifo_list); |
|||
saved_fifo = 1; |
|||
} |
|||
*************** |
|||
*** 742,746 **** |
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
if (saved_fifo) |
|||
! free ((void *)ofifo_list); |
|||
#endif |
|||
return (last_command_exit_value = EXECUTION_FAILURE); |
|||
--- 744,751 ---- |
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
if (saved_fifo) |
|||
! { |
|||
! free ((void *)ofifo_list); |
|||
! discard_unwind_frame ("internal_fifos"); |
|||
! } |
|||
#endif |
|||
return (last_command_exit_value = EXECUTION_FAILURE); |
|||
*************** |
|||
*** 1061,1064 **** |
|||
--- 1066,1070 ---- |
|||
close_new_fifos ((char *)ofifo_list, osize); |
|||
free ((void *)ofifo_list); |
|||
+ discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
#endif |
|||
*************** |
|||
*** 4978,4984 **** |
|||
#endif |
|||
|
|||
! #if defined (PROCESS_SUBSTITUTION) |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list (&osize); |
|||
#endif |
|||
|
|||
--- 4984,4995 ---- |
|||
#endif |
|||
|
|||
! #if defined (PROCESS_SUBSTITUTION) |
|||
! begin_unwind_frame ("saved_fifos"); |
|||
! /* If we return, we longjmp and don't get a chance to restore the old |
|||
! fifo list, so we add an unwind protect to free it */ |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list (&osize); |
|||
+ if (ofifo_list) |
|||
+ add_unwind_protect (xfree, ofifo_list); |
|||
#endif |
|||
|
|||
*************** |
|||
*** 5064,5068 **** |
|||
if (nfifo > ofifo) |
|||
close_new_fifos (ofifo_list, osize); |
|||
! free (ofifo_list); |
|||
#endif |
|||
|
|||
--- 5075,5081 ---- |
|||
if (nfifo > ofifo) |
|||
close_new_fifos (ofifo_list, osize); |
|||
! if (ofifo_list) |
|||
! free (ofifo_list); |
|||
! discard_unwind_frame ("saved_fifos"); |
|||
#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 13 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 14 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,43 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-015 |
|||
|
|||
Bug-Reported-by: David Simmons <bug-bash@tmp.davidsimmons.com> |
|||
Bug-Reference-ID: <bc6f0839-fa50-fe8f-65f5-5aa6feb11ec5@davidsimmons.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-02/msg00033.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Process substitution can leak internal quoting to the parser in the invoked |
|||
subshell. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20170210/subst.c 2017-01-19 11:08:50.000000000 -0500 |
|||
--- subst.c 2017-02-20 10:12:49.000000000 -0500 |
|||
*************** |
|||
*** 5907,5910 **** |
|||
--- 5907,5912 ---- |
|||
expanding_redir = 0; |
|||
|
|||
+ remove_quoted_escapes (string); |
|||
+ |
|||
subshell_level++; |
|||
result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST)); |
|||
*** ../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 14 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 15 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,78 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-016 |
|||
|
|||
Bug-Reported-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> |
|||
Bug-Reference-ID: <CAJq09z7G1-QnLyiUQA0DS=V3da_rtHF8VdYbbdzPe_W3kydpRg@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00092.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Bash can perform trap processing while reading command substitution output |
|||
instead of waiting until the command completes. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4/lib/sh/zread.c 2014-12-22 10:48:04.000000000 -0500 |
|||
--- lib/sh/zread.c 2016-09-29 15:21:36.000000000 -0400 |
|||
*************** |
|||
*** 38,42 **** |
|||
--- 38,45 ---- |
|||
#endif |
|||
|
|||
+ extern int executing_builtin; |
|||
+ |
|||
extern void check_signals_and_traps (void); |
|||
+ extern void check_signals (void); |
|||
extern int signal_is_trapped (int); |
|||
|
|||
*************** |
|||
*** 51,69 **** |
|||
ssize_t r; |
|||
|
|||
- #if 0 |
|||
- #if defined (HAVE_SIGINTERRUPT) |
|||
- if (signal_is_trapped (SIGCHLD)) |
|||
- siginterrupt (SIGCHLD, 1); |
|||
- #endif |
|||
- #endif |
|||
- |
|||
while ((r = read (fd, buf, len)) < 0 && errno == EINTR) |
|||
! check_signals_and_traps (); /* XXX - should it be check_signals()? */ |
|||
! |
|||
! #if 0 |
|||
! #if defined (HAVE_SIGINTERRUPT) |
|||
! siginterrupt (SIGCHLD, 0); |
|||
! #endif |
|||
! #endif |
|||
|
|||
return r; |
|||
--- 54,64 ---- |
|||
ssize_t r; |
|||
|
|||
while ((r = read (fd, buf, len)) < 0 && errno == EINTR) |
|||
! /* XXX - bash-5.0 */ |
|||
! /* We check executing_builtin and run traps here for backwards compatibility */ |
|||
! if (executing_builtin) |
|||
! check_signals_and_traps (); /* XXX - should it be check_signals()? */ |
|||
! else |
|||
! check_signals (); |
|||
|
|||
return r; |
|||
*** ../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 15 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 16 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,45 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-017 |
|||
|
|||
Bug-Reported-by: ZhangXiao <xiao.zhang@windriver.com> |
|||
Bug-Reference-ID: <58AD3EAC.4020608@windriver.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-02/msg00061.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There is a memory leak when `read -e' is used to read a line using readline. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20170217/builtins/read.def 2017-01-02 16:53:02.000000000 -0500 |
|||
--- builtins/read.def 2017-02-22 09:43:14.000000000 -0500 |
|||
*************** |
|||
*** 691,694 **** |
|||
--- 691,699 ---- |
|||
CHECK_ALRM; |
|||
|
|||
+ #if defined (READLINE) |
|||
+ if (edit) |
|||
+ free (rlbuf); |
|||
+ #endif |
|||
+ |
|||
if (retval < 0) |
|||
{ |
|||
*** ../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 16 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 17 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,48 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-018 |
|||
|
|||
Bug-Reported-by: Siteshwar Vashisht <svashisht@redhat.com> |
|||
Bug-Reference-ID: <1341922391.30876471.1501250355579.JavaMail.zimbra@redhat.com> |
|||
Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=1466737 |
|||
|
|||
Bug-Description: |
|||
|
|||
Under certain circumstances (e.g., reading from /dev/zero), read(2) will not |
|||
return -1 even when interrupted by a signal. The read builtin needs to check |
|||
for signals in this case. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20170622/builtins/read.def 2017-06-17 18:45:20.000000000 -0400 |
|||
--- builtins/read.def 2017-06-30 11:09:26.000000000 -0400 |
|||
*************** |
|||
*** 611,615 **** |
|||
|
|||
CHECK_ALRM; |
|||
! |
|||
#if defined (READLINE) |
|||
} |
|||
--- 611,615 ---- |
|||
|
|||
CHECK_ALRM; |
|||
! QUIT; /* in case we didn't call check_signals() */ |
|||
#if defined (READLINE) |
|||
} |
|||
*** ../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 17 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 18 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,50 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-019 |
|||
|
|||
Bug-Reported-by: Kieran Grant <kieran.thehacker.grant@gmail.com> |
|||
Bug-Reference-ID: <ec9071ae-efb1-9e09-5d03-e905daf2835c@gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2018-02/msg00002.html |
|||
|
|||
Bug-Description: |
|||
|
|||
With certain values for PS1, especially those that wrap onto three or more |
|||
lines, readline will miscalculate the number of invisible characters, |
|||
leading to crashes and core dumps. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4.18/lib/readline/display.c 2016-07-28 14:49:33.000000000 -0400 |
|||
--- lib/readline/display.c 2018-02-03 19:19:35.000000000 -0500 |
|||
*************** |
|||
*** 772,776 **** |
|||
wadjust = (newlines == 0) |
|||
? prompt_invis_chars_first_line |
|||
! : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line); |
|||
|
|||
/* fix from Darin Johnson <darin@acuson.com> for prompt string with |
|||
--- 788,794 ---- |
|||
wadjust = (newlines == 0) |
|||
? prompt_invis_chars_first_line |
|||
! : ((newlines == prompt_lines_estimate) |
|||
! ? (wrap_offset - prompt_invis_chars_first_line) |
|||
! : 0); |
|||
|
|||
/* fix from Darin Johnson <darin@acuson.com> for prompt string with |
|||
*** ../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 18 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 19 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,177 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-020 |
|||
|
|||
Bug-Reported-by: Graham Northup <northug@clarkson.edu> |
|||
Bug-Reference-ID: <537530c3-61f0-349b-9de6-fa4e2487f428@clarkson.edu> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-02/msg00025.html |
|||
|
|||
Bug-Description: |
|||
|
|||
In circumstances involving long-running scripts that create and reap many |
|||
processes, it is possible for the hash table bash uses to store exit |
|||
statuses from asynchronous processes to develop loops. This patch fixes |
|||
the loop causes and adds code to detect any future loops. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/jobs.c 2016-11-11 13:42:55.000000000 -0500 |
|||
--- jobs.c 2017-02-22 15:16:28.000000000 -0500 |
|||
*************** |
|||
*** 813,818 **** |
|||
struct pidstat *ps; |
|||
|
|||
! bucket = pshash_getbucket (pid); |
|||
! psi = bgp_getindex (); |
|||
ps = &bgpids.storage[psi]; |
|||
|
|||
--- 796,815 ---- |
|||
struct pidstat *ps; |
|||
|
|||
! /* bucket == existing chain of pids hashing to same value |
|||
! psi = where were going to put this pid/status */ |
|||
! |
|||
! bucket = pshash_getbucket (pid); /* index into pidstat_table */ |
|||
! psi = bgp_getindex (); /* bgpids.head, index into storage */ |
|||
! |
|||
! /* XXX - what if psi == *bucket? */ |
|||
! if (psi == *bucket) |
|||
! { |
|||
! #ifdef DEBUG |
|||
! internal_warning ("hashed pid %d (pid %d) collides with bgpids.head, skipping", psi, pid); |
|||
! #endif |
|||
! bgpids.storage[psi].pid = NO_PID; /* make sure */ |
|||
! psi = bgp_getindex (); /* skip to next one */ |
|||
! } |
|||
! |
|||
ps = &bgpids.storage[psi]; |
|||
|
|||
*************** |
|||
*** 842,845 **** |
|||
--- 839,843 ---- |
|||
{ |
|||
struct pidstat *ps; |
|||
+ ps_index_t *bucket; |
|||
|
|||
ps = &bgpids.storage[psi]; |
|||
*************** |
|||
*** 847,856 **** |
|||
return; |
|||
|
|||
! if (ps->bucket_next != NO_PID) |
|||
bgpids.storage[ps->bucket_next].bucket_prev = ps->bucket_prev; |
|||
! if (ps->bucket_prev != NO_PID) |
|||
bgpids.storage[ps->bucket_prev].bucket_next = ps->bucket_next; |
|||
else |
|||
! *(pshash_getbucket (ps->pid)) = ps->bucket_next; |
|||
} |
|||
|
|||
--- 845,861 ---- |
|||
return; |
|||
|
|||
! if (ps->bucket_next != NO_PIDSTAT) |
|||
bgpids.storage[ps->bucket_next].bucket_prev = ps->bucket_prev; |
|||
! if (ps->bucket_prev != NO_PIDSTAT) |
|||
bgpids.storage[ps->bucket_prev].bucket_next = ps->bucket_next; |
|||
else |
|||
! { |
|||
! bucket = pshash_getbucket (ps->pid); |
|||
! *bucket = ps->bucket_next; /* deleting chain head in hash table */ |
|||
! } |
|||
! |
|||
! /* clear out this cell, just in case */ |
|||
! ps->pid = NO_PID; |
|||
! ps->bucket_next = ps->bucket_prev = NO_PIDSTAT; |
|||
} |
|||
|
|||
*************** |
|||
*** 859,863 **** |
|||
pid_t pid; |
|||
{ |
|||
! ps_index_t psi; |
|||
|
|||
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) |
|||
--- 864,868 ---- |
|||
pid_t pid; |
|||
{ |
|||
! ps_index_t psi, orig_psi; |
|||
|
|||
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) |
|||
*************** |
|||
*** 865,871 **** |
|||
|
|||
/* Search chain using hash to find bucket in pidstat_table */ |
|||
! for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) |
|||
! if (bgpids.storage[psi].pid == pid) |
|||
! break; |
|||
|
|||
if (psi == NO_PIDSTAT) |
|||
--- 870,883 ---- |
|||
|
|||
/* Search chain using hash to find bucket in pidstat_table */ |
|||
! for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) |
|||
! { |
|||
! if (bgpids.storage[psi].pid == pid) |
|||
! break; |
|||
! if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */ |
|||
! { |
|||
! internal_warning ("bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next", psi); |
|||
! return 0; |
|||
! } |
|||
! } |
|||
|
|||
if (psi == NO_PIDSTAT) |
|||
*************** |
|||
*** 905,909 **** |
|||
pid_t pid; |
|||
{ |
|||
! ps_index_t psi; |
|||
|
|||
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) |
|||
--- 917,921 ---- |
|||
pid_t pid; |
|||
{ |
|||
! ps_index_t psi, orig_psi; |
|||
|
|||
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) |
|||
*************** |
|||
*** 911,917 **** |
|||
|
|||
/* Search chain using hash to find bucket in pidstat_table */ |
|||
! for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) |
|||
! if (bgpids.storage[psi].pid == pid) |
|||
! return (bgpids.storage[psi].status); |
|||
|
|||
return -1; |
|||
--- 923,936 ---- |
|||
|
|||
/* Search chain using hash to find bucket in pidstat_table */ |
|||
! for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) |
|||
! { |
|||
! if (bgpids.storage[psi].pid == pid) |
|||
! return (bgpids.storage[psi].status); |
|||
! if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */ |
|||
! { |
|||
! internal_warning ("bgp_search: LOOP: psi (%d) == storage[psi].bucket_next", psi); |
|||
! return -1; |
|||
! } |
|||
! } |
|||
|
|||
return -1; |
|||
*** ../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 19 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 20 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,57 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-021 |
|||
|
|||
Bug-Reported-by: werner@suse.de |
|||
Bug-Reference-ID: <201803281402.w2SE2VOa000476@noether.suse.de> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2018-03/msg00196.html |
|||
|
|||
Bug-Description: |
|||
|
|||
A SIGINT received inside a SIGINT trap handler can possibly cause the |
|||
shell to loop. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20180329/jobs.c 2018-02-11 18:07:22.000000000 -0500 |
|||
--- jobs.c 2018-04-02 14:24:21.000000000 -0400 |
|||
*************** |
|||
*** 2690,2694 **** |
|||
if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) |
|||
{ |
|||
! old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); |
|||
waiting_for_child = 0; |
|||
if (old_sigint_handler == SIG_IGN) |
|||
--- 2690,2704 ---- |
|||
if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) |
|||
{ |
|||
! SigHandler *temp_sigint_handler; |
|||
! |
|||
! temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); |
|||
! if (temp_sigint_handler == wait_sigint_handler) |
|||
! { |
|||
! #if defined (DEBUG) |
|||
! internal_warning ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap); |
|||
! #endif |
|||
! } |
|||
! else |
|||
! old_sigint_handler = temp_sigint_handler; |
|||
waiting_for_child = 0; |
|||
if (old_sigint_handler == SIG_IGN) |
|||
*** ../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 20 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 21 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,61 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-022 |
|||
|
|||
Bug-Reported-by: Nuzhna Pomoshch <nuzhna_pomoshch@yahoo.com> |
|||
Bug-Reference-ID: <1317167476.1492079.1495999776464@mail.yahoo.com> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2017-05/msg00005.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There are cases where a failing readline command (e.g., delete-char at the end |
|||
of a line) can cause a multi-character key sequence to `back up' and attempt |
|||
to re-read some of the characters in the sequence. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/lib/readline/readline.c 2016-04-20 15:53:52.000000000 -0400 |
|||
--- lib/readline/readline.c 2018-05-26 17:19:00.000000000 -0400 |
|||
*************** |
|||
*** 1058,1062 **** |
|||
r = _rl_dispatch (ANYOTHERKEY, m); |
|||
} |
|||
! else if (r && map[ANYOTHERKEY].function) |
|||
{ |
|||
/* We didn't match (r is probably -1), so return something to |
|||
--- 1056,1060 ---- |
|||
r = _rl_dispatch (ANYOTHERKEY, m); |
|||
} |
|||
! else if (r < 0 && map[ANYOTHERKEY].function) |
|||
{ |
|||
/* We didn't match (r is probably -1), so return something to |
|||
*************** |
|||
*** 1070,1074 **** |
|||
return -2; |
|||
} |
|||
! else if (r && got_subseq) |
|||
{ |
|||
/* OK, back up the chain. */ |
|||
--- 1068,1072 ---- |
|||
return -2; |
|||
} |
|||
! else if (r < 0 && got_subseq) /* XXX */ |
|||
{ |
|||
/* OK, back up the chain. */ |
|||
*** ../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 21 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 22 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -1,52 +0,0 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 4.4 |
|||
Patch-ID: bash44-023 |
|||
|
|||
Bug-Reported-by: Martijn Dekker <martijn@inlv.org> |
|||
Bug-Reference-ID: <5326d6b9-2625-1d32-3e6e-ad1d15462c09@inlv.org> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00041.html |
|||
|
|||
Bug-Description: |
|||
|
|||
When sourcing a file from an interactive shell, setting the SIGINT handler |
|||
to the default and typing ^C will cause the shell to exit. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-4.4-patched/builtins/trap.def 2016-01-25 13:32:38.000000000 -0500 |
|||
--- builtins/trap.def 2016-11-06 12:04:35.000000000 -0500 |
|||
*************** |
|||
*** 99,102 **** |
|||
--- 99,103 ---- |
|||
|
|||
extern int posixly_correct, subshell_environment; |
|||
+ extern int sourcelevel, running_trap; |
|||
|
|||
int |
|||
*************** |
|||
*** 213,216 **** |
|||
--- 214,220 ---- |
|||
if (interactive) |
|||
set_signal_handler (SIGINT, sigint_sighandler); |
|||
+ /* special cases for interactive == 0 */ |
|||
+ else if (interactive_shell && (sourcelevel||running_trap)) |
|||
+ set_signal_handler (SIGINT, sigint_sighandler); |
|||
else |
|||
set_signal_handler (SIGINT, termsig_sighandler); |
|||
*** ../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 22 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 23 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,166 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-001 |
|||
|
|||
Bug-Reported-by: axel@freakout.de |
|||
Bug-Reference-ID: <201901082050.x08KoShS006731@bongo.freakout.de> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Under certain circumstances, the glob expansion code did not remove |
|||
backslashes escaping characters in directory names (or portions of a |
|||
pattern preceding a slash). |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500 |
|||
--- bashline.c 2019-01-16 16:06:03.000000000 -0500 |
|||
*************** |
|||
*** 232,235 **** |
|||
--- 232,236 ---- |
|||
static int bash_possible_command_completions __P((int, int)); |
|||
|
|||
+ static int completion_glob_pattern __P((char *)); |
|||
static char *glob_complete_word __P((const char *, int)); |
|||
static int bash_glob_completion_internal __P((int)); |
|||
*************** |
|||
*** 1742,1746 **** |
|||
/* This could be a globbing pattern, so try to expand it using pathname |
|||
expansion. */ |
|||
! if (!matches && glob_pattern_p (text)) |
|||
{ |
|||
matches = rl_completion_matches (text, glob_complete_word); |
|||
--- 1743,1747 ---- |
|||
/* This could be a globbing pattern, so try to expand it using pathname |
|||
expansion. */ |
|||
! if (!matches && completion_glob_pattern ((char *)text)) |
|||
{ |
|||
matches = rl_completion_matches (text, glob_complete_word); |
|||
*************** |
|||
*** 1851,1855 **** |
|||
} |
|||
|
|||
! globpat = glob_pattern_p (hint_text); |
|||
|
|||
/* If this is an absolute program name, do not check it against |
|||
--- 1852,1856 ---- |
|||
} |
|||
|
|||
! globpat = completion_glob_pattern ((char *)hint_text); |
|||
|
|||
/* If this is an absolute program name, do not check it against |
|||
*************** |
|||
*** 3714,3717 **** |
|||
--- 3715,3773 ---- |
|||
} |
|||
|
|||
+ static int |
|||
+ completion_glob_pattern (string) |
|||
+ char *string; |
|||
+ { |
|||
+ register int c; |
|||
+ char *send; |
|||
+ int open; |
|||
+ |
|||
+ DECLARE_MBSTATE; |
|||
+ |
|||
+ open = 0; |
|||
+ send = string + strlen (string); |
|||
+ |
|||
+ while (c = *string++) |
|||
+ { |
|||
+ switch (c) |
|||
+ { |
|||
+ case '?': |
|||
+ case '*': |
|||
+ return (1); |
|||
+ |
|||
+ case '[': |
|||
+ open++; |
|||
+ continue; |
|||
+ |
|||
+ case ']': |
|||
+ if (open) |
|||
+ return (1); |
|||
+ continue; |
|||
+ |
|||
+ case '+': |
|||
+ case '@': |
|||
+ case '!': |
|||
+ if (*string == '(') /*)*/ |
|||
+ return (1); |
|||
+ continue; |
|||
+ |
|||
+ case '\\': |
|||
+ if (*string == 0) |
|||
+ return (0); |
|||
+ } |
|||
+ |
|||
+ /* Advance one fewer byte than an entire multibyte character to |
|||
+ account for the auto-increment in the loop above. */ |
|||
+ #ifdef HANDLE_MULTIBYTE |
|||
+ string--; |
|||
+ ADVANCE_CHAR_P (string, send - string); |
|||
+ string++; |
|||
+ #else |
|||
+ ADVANCE_CHAR_P (string, send - string); |
|||
+ #endif |
|||
+ } |
|||
+ return (0); |
|||
+ } |
|||
+ |
|||
static char *globtext; |
|||
static char *globorig; |
|||
*************** |
|||
*** 3878,3882 **** |
|||
} |
|||
|
|||
! if (t && glob_pattern_p (t) == 0) |
|||
rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ |
|||
FREE (t); |
|||
--- 3934,3938 ---- |
|||
} |
|||
|
|||
! if (t && completion_glob_pattern (t) == 0) |
|||
rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ |
|||
FREE (t); |
|||
*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500 |
|||
--- lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500 |
|||
*************** |
|||
*** 55,59 **** |
|||
|
|||
case L('\\'): |
|||
- #if 0 |
|||
/* Don't let the pattern end in a backslash (GMATCH returns no match |
|||
if the pattern ends in a backslash anyway), but otherwise return 1, |
|||
--- 55,58 ---- |
|||
*************** |
|||
*** 61,69 **** |
|||
and it can be removed. */ |
|||
return (*p != L('\0')); |
|||
- #else |
|||
- /* The pattern may not end with a backslash. */ |
|||
- if (*p++ == L('\0')) |
|||
- return 0; |
|||
- #endif |
|||
} |
|||
|
|||
--- 60,63 ---- |
|||
*** ../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 0 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 1 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,113 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-002 |
|||
|
|||
Bug-Reported-by: Ante Peric <synthmeat@gmail.com> |
|||
Bug-Reference-ID: <B7E3B567-2467-4F7B-B6B9-CA4E75A9C93F@gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html |
|||
|
|||
Bug-Description: |
|||
|
|||
When an alias value ends with an unquoted literal tab (not part of a quoted |
|||
string or comment), alias expansion cannot correctly detect the end of the |
|||
alias value after expanding it. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500 |
|||
--- parser.h 2019-01-11 15:13:03.000000000 -0500 |
|||
*************** |
|||
*** 48,51 **** |
|||
--- 48,52 ---- |
|||
#define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */ |
|||
#define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */ |
|||
+ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */ |
|||
|
|||
/* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ |
|||
*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500 |
|||
--- parse.y 2019-01-14 08:23:31.000000000 -0500 |
|||
*************** |
|||
*** 2558,2567 **** |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
shell_input_line_index > 0 && |
|||
! shell_input_line[shell_input_line_index-1] != ' ' && |
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
--- 2558,2569 ---- |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */ |
|||
shell_input_line_index > 0 && |
|||
! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
+ parser_state |= PST_ENDALIAS; |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
*************** |
|||
*** 2572,2575 **** |
|||
--- 2574,2578 ---- |
|||
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) |
|||
{ |
|||
+ parser_state &= ~PST_ENDALIAS; |
|||
pop_string (); |
|||
uc = shell_input_line[shell_input_line_index]; |
|||
*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500 |
|||
--- y.tab.c 2019-01-14 08:39:23.000000000 -0500 |
|||
*************** |
|||
*** 4874,4883 **** |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
shell_input_line_index > 0 && |
|||
! shell_input_line[shell_input_line_index-1] != ' ' && |
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
--- 4874,4885 ---- |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */ |
|||
shell_input_line_index > 0 && |
|||
! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
+ parser_state |= PST_ENDALIAS; |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
*************** |
|||
*** 4888,4891 **** |
|||
--- 4890,4894 ---- |
|||
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) |
|||
{ |
|||
+ parser_state &= ~PST_ENDALIAS; |
|||
pop_string (); |
|||
uc = shell_input_line[shell_input_line_index]; |
|||
*** ../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 1 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 2 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
Loading…
Reference in new issue