vanhofen
5 years ago
6 changed files with 614 additions and 0 deletions
@ -0,0 +1,64 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-012 |
|||
|
|||
Bug-Reported-by: lessbug@qq.com |
|||
Bug-Reference-ID: <tencent_6AA531D9A5CC4121D86BD5CDA2E0DA98C605@qq.com> |
|||
Bug-Reference-URL: |
|||
|
|||
Bug-Description: |
|||
|
|||
When using previous-history to go back beyond the beginning of the history list, |
|||
it's possible to move to an incorrect partial line. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/readline/misc.c 2017-07-07 17:30:12.000000000 -0400 |
|||
--- lib/readline/misc.c 2019-05-16 11:43:46.000000000 -0400 |
|||
*************** |
|||
*** 577,580 **** |
|||
--- 590,594 ---- |
|||
{ |
|||
HIST_ENTRY *old_temp, *temp; |
|||
+ int had_saved_line; |
|||
|
|||
if (count < 0) |
|||
*************** |
|||
*** 589,592 **** |
|||
--- 603,607 ---- |
|||
|
|||
/* If we don't have a line saved, then save this one. */ |
|||
+ had_saved_line = _rl_saved_line_for_history != 0; |
|||
rl_maybe_save_line (); |
|||
|
|||
*************** |
|||
*** 612,616 **** |
|||
if (temp == 0) |
|||
{ |
|||
! rl_maybe_unsave_line (); |
|||
rl_ding (); |
|||
} |
|||
--- 627,632 ---- |
|||
if (temp == 0) |
|||
{ |
|||
! if (had_saved_line == 0) |
|||
! _rl_free_saved_history_line (); |
|||
rl_ding (); |
|||
} |
|||
*** ../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 11 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 12 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,73 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-013 |
|||
|
|||
Bug-Reported-by: HIROSE Masaaki <hirose31@gmail.com> |
|||
Bug-Reference-ID: <CAGSOfA-RqiTe=+GsXsDKyZrrMWH4bDbXgMVVegMa6OjqC5xbnQ@mail.gmail.com> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00038.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Reading history entries with timestamps can result in history entries joined |
|||
by linefeeds. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 |
|||
--- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 |
|||
*************** |
|||
*** 370,376 **** |
|||
|
|||
has_timestamps = HIST_TIMESTAMP_START (buffer); |
|||
! history_multiline_entries += has_timestamps && history_write_timestamps; |
|||
|
|||
/* Skip lines until we are at FROM. */ |
|||
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) |
|||
if (*line_end == '\n') |
|||
--- 370,378 ---- |
|||
|
|||
has_timestamps = HIST_TIMESTAMP_START (buffer); |
|||
! history_multiline_entries += has_timestamps && history_write_timestamps; |
|||
|
|||
/* Skip lines until we are at FROM. */ |
|||
+ if (has_timestamps) |
|||
+ last_ts = buffer; |
|||
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) |
|||
if (*line_end == '\n') |
|||
*************** |
|||
*** 381,385 **** |
|||
--- 383,398 ---- |
|||
if (HIST_TIMESTAMP_START(p) == 0) |
|||
current_line++; |
|||
+ else |
|||
+ last_ts = p; |
|||
line_start = p; |
|||
+ /* If we are at the last line (current_line == from) but we have |
|||
+ timestamps (has_timestamps), then line_start points to the |
|||
+ text of the last command, and we need to skip to its end. */ |
|||
+ if (current_line >= from && has_timestamps) |
|||
+ { |
|||
+ for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++) |
|||
+ ; |
|||
+ line_start = (*line_end == '\n') ? line_end + 1 : line_end; |
|||
+ } |
|||
} |
|||
|
|||
|
|||
*** ../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 12 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 13 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,52 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-014 |
|||
|
|||
Bug-Reported-by: Johannes Hielscher <jhielscher@posteo.de> |
|||
Bug-Reference-ID: <20190208205048.77c25a83@hordevm> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00032.html |
|||
|
|||
Bug-Description: |
|||
|
|||
If the current line is empty, using the emacs C-xC-e binding to enter the |
|||
editor will edit the previous command instead of the current (empty) one. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 |
|||
--- bashline.c 2019-02-11 11:18:57.000000000 -0500 |
|||
*************** |
|||
*** 962,970 **** |
|||
finished with the command, so we should not ignore the last command */ |
|||
using_history (); |
|||
! if (rl_line_buffer[0]) |
|||
! { |
|||
! current_command_line_count++; /* for rl_newline above */ |
|||
! bash_add_history (rl_line_buffer); |
|||
! } |
|||
current_command_line_count = 0; /* for dummy history entry */ |
|||
bash_add_history (""); |
|||
--- 965,970 ---- |
|||
finished with the command, so we should not ignore the last command */ |
|||
using_history (); |
|||
! current_command_line_count++; /* for rl_newline above */ |
|||
! bash_add_history (rl_line_buffer); |
|||
current_command_line_count = 0; /* for dummy history entry */ |
|||
bash_add_history (""); |
|||
*** ../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 13 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 14 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,78 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-015 |
|||
|
|||
Bug-Reported-by: Yu Kou <ckyoog@gmail.com> |
|||
Bug-Reference-ID: <CAAqoF9Ko3nAShJXGzucafs-ByUagzZ4nbQonwEkwC7s9UqfWKw@mail.gmail.com> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00032.html |
|||
|
|||
Bug-Description: |
|||
|
|||
If alias expansion is enabled when processing the command argument to the |
|||
`-c' option, an alias is defined in that command, and the command ends with |
|||
the invocation of that alias, the shell's command parser can prematurely |
|||
terminate before the entire command is executed. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20190426/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 |
|||
--- builtins/evalstring.c 2019-05-15 14:19:36.000000000 -0400 |
|||
*************** |
|||
*** 92,95 **** |
|||
--- 92,96 ---- |
|||
running_trap == 0 && |
|||
*bash_input.location.string == '\0' && |
|||
+ parser_expanding_alias () == 0 && |
|||
command->type == cm_simple && |
|||
signal_is_trapped (EXIT_TRAP) == 0 && |
|||
*************** |
|||
*** 106,109 **** |
|||
--- 107,111 ---- |
|||
{ |
|||
return (*bash_input.location.string == '\0' && |
|||
+ parser_expanding_alias () == 0 && |
|||
(command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && |
|||
command->value.Connection->second->type == cm_simple); |
|||
*************** |
|||
*** 291,295 **** |
|||
with_input_from_string (string, from_file); |
|||
clear_shell_input_line (); |
|||
! while (*(bash_input.location.string)) |
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
--- 293,297 ---- |
|||
with_input_from_string (string, from_file); |
|||
clear_shell_input_line (); |
|||
! while (*(bash_input.location.string) || parser_expanding_alias ()) |
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
*************** |
|||
*** 546,550 **** |
|||
|
|||
with_input_from_string (string, from_file); |
|||
! while (*(bash_input.location.string)) |
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
--- 548,552 ---- |
|||
|
|||
with_input_from_string (string, from_file); |
|||
! while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */ |
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
*** ../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 14 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 15 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,58 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-016 |
|||
|
|||
Bug-Reported-by: sunnycemetery@gmail.com |
|||
Bug-Reference-ID: <20190316041534.GB22884@midnight> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-03/msg00070.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Bash waits too long to reap /dev/fd process substitutions used as redirections |
|||
with loops and group commands, which can lead to file descriptor exhaustion. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/execute_cmd.c 2019-04-19 15:46:36.000000000 -0400 |
|||
--- execute_cmd.c 2019-07-01 16:45:49.000000000 -0400 |
|||
*************** |
|||
*** 1104,1107 **** |
|||
--- 1085,1104 ---- |
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
+ # if defined (HAVE_DEV_FD) |
|||
+ /* Reap process substitutions at the end of loops */ |
|||
+ switch (command->type) |
|||
+ { |
|||
+ case cm_while: |
|||
+ case cm_until: |
|||
+ case cm_for: |
|||
+ case cm_group: |
|||
+ # if defined (ARITH_FOR_COMMAND) |
|||
+ case cm_arith_for: |
|||
+ # endif |
|||
+ reap_procsubs (); |
|||
+ default: |
|||
+ break; |
|||
+ } |
|||
+ # endif /* HAVE_DEV_FD */ |
|||
#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 15 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 16 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,289 @@ |
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-017 |
|||
|
|||
Bug-Reported-by: Valentin Lab <valentin.lab@kalysto.org> |
|||
Bug-Reference-ID: <ab981b9c-60a5-46d0-b7e6-a6d88b80df50@kalysto.org> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-03/msg00062.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There were cases where patch 16 reaped process substitution file descriptors |
|||
(or FIFOs) and processes to early. This is a better fix for the problem that |
|||
bash50-016 attempted to solve. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/subst.c 2019-08-29 11:16:49.000000000 -0400 |
|||
--- subst.c 2020-04-02 16:24:19.000000000 -0400 |
|||
*************** |
|||
*** 5337,5341 **** |
|||
} |
|||
|
|||
! char * |
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
--- 5337,5341 ---- |
|||
} |
|||
|
|||
! void * |
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
*************** |
|||
*** 5343,5347 **** |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (char *)NULL; |
|||
} |
|||
|
|||
--- 5343,5347 ---- |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (void *)NULL; |
|||
} |
|||
|
|||
*************** |
|||
*** 5409,5414 **** |
|||
if (fifo_list[i].file) |
|||
{ |
|||
! fifo_list[j].file = fifo_list[i].file; |
|||
! fifo_list[j].proc = fifo_list[i].proc; |
|||
j++; |
|||
} |
|||
--- 5409,5419 ---- |
|||
if (fifo_list[i].file) |
|||
{ |
|||
! if (i != j) |
|||
! { |
|||
! fifo_list[j].file = fifo_list[i].file; |
|||
! fifo_list[j].proc = fifo_list[i].proc; |
|||
! fifo_list[i].file = (char *)NULL; |
|||
! fifo_list[i].proc = 0; |
|||
! } |
|||
j++; |
|||
} |
|||
*************** |
|||
*** 5426,5433 **** |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! char *list; |
|||
int lsize; |
|||
{ |
|||
int i; |
|||
|
|||
if (list == 0) |
|||
--- 5431,5439 ---- |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! void *list; |
|||
int lsize; |
|||
{ |
|||
int i; |
|||
+ char *plist; |
|||
|
|||
if (list == 0) |
|||
*************** |
|||
*** 5437,5442 **** |
|||
} |
|||
|
|||
! for (i = 0; i < lsize; i++) |
|||
! if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) |
|||
unlink_fifo (i); |
|||
|
|||
--- 5443,5448 ---- |
|||
} |
|||
|
|||
! for (plist = (char *)list, i = 0; i < lsize; i++) |
|||
! if (plist[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) |
|||
unlink_fifo (i); |
|||
|
|||
*************** |
|||
*** 5560,5568 **** |
|||
} |
|||
|
|||
! char * |
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
{ |
|||
! char *ret; |
|||
|
|||
if (nfds == 0 || totfds == 0) |
|||
--- 5566,5574 ---- |
|||
} |
|||
|
|||
! void * |
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
{ |
|||
! void *ret; |
|||
|
|||
if (nfds == 0 || totfds == 0) |
|||
*************** |
|||
*** 5570,5579 **** |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (char *)NULL; |
|||
} |
|||
|
|||
if (sizep) |
|||
*sizep = totfds; |
|||
! ret = (char *)xmalloc (totfds * sizeof (pid_t)); |
|||
return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); |
|||
} |
|||
--- 5576,5585 ---- |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (void *)NULL; |
|||
} |
|||
|
|||
if (sizep) |
|||
*sizep = totfds; |
|||
! ret = xmalloc (totfds * sizeof (pid_t)); |
|||
return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); |
|||
} |
|||
*************** |
|||
*** 5648,5655 **** |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! char *list; |
|||
int lsize; |
|||
{ |
|||
int i; |
|||
|
|||
if (list == 0) |
|||
--- 5654,5662 ---- |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! void *list; |
|||
int lsize; |
|||
{ |
|||
int i; |
|||
+ pid_t *plist; |
|||
|
|||
if (list == 0) |
|||
*************** |
|||
*** 5659,5664 **** |
|||
} |
|||
|
|||
! for (i = 0; i < lsize; i++) |
|||
! if (list[i] == 0 && i < totfds && dev_fd_list[i]) |
|||
unlink_fifo (i); |
|||
|
|||
--- 5666,5671 ---- |
|||
} |
|||
|
|||
! for (plist = (pid_t *)list, i = 0; i < lsize; i++) |
|||
! if (plist[i] == 0 && i < totfds && dev_fd_list[i]) |
|||
unlink_fifo (i); |
|||
|
|||
*** ../bash-5.0-patched/subst.h 2018-10-21 18:46:09.000000000 -0400 |
|||
--- subst.h 2020-04-02 16:29:28.000000000 -0400 |
|||
*************** |
|||
*** 274,280 **** |
|||
extern void unlink_fifo __P((int)); |
|||
|
|||
! extern char *copy_fifo_list __P((int *)); |
|||
! extern void unlink_new_fifos __P((char *, int)); |
|||
! extern void close_new_fifos __P((char *, int)); |
|||
|
|||
extern void clear_fifo_list __P((void)); |
|||
--- 274,279 ---- |
|||
extern void unlink_fifo __P((int)); |
|||
|
|||
! extern void *copy_fifo_list __P((int *)); |
|||
! extern void close_new_fifos __P((void *, int)); |
|||
|
|||
extern void clear_fifo_list __P((void)); |
|||
*** ../bash-5.0-patched/execute_cmd.c 2020-02-06 20:16:48.000000000 -0500 |
|||
--- execute_cmd.c 2020-04-02 17:00:10.000000000 -0400 |
|||
*************** |
|||
*** 565,569 **** |
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
volatile int ofifo, nfifo, osize, saved_fifo; |
|||
! volatile char *ofifo_list; |
|||
#endif |
|||
|
|||
--- 565,569 ---- |
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
volatile int ofifo, nfifo, osize, saved_fifo; |
|||
! volatile void *ofifo_list; |
|||
#endif |
|||
|
|||
*************** |
|||
*** 751,760 **** |
|||
# endif |
|||
|
|||
! if (variable_context != 0) /* XXX - also if sourcelevel != 0? */ |
|||
{ |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list ((int *)&osize); |
|||
begin_unwind_frame ("internal_fifos"); |
|||
! add_unwind_protect (xfree, ofifo_list); |
|||
saved_fifo = 1; |
|||
} |
|||
--- 751,762 ---- |
|||
# endif |
|||
|
|||
! /* XXX - also if sourcelevel != 0? */ |
|||
! if (variable_context != 0) |
|||
{ |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list ((int *)&osize); |
|||
begin_unwind_frame ("internal_fifos"); |
|||
! if (ofifo_list) |
|||
! add_unwind_protect (xfree, ofifo_list); |
|||
saved_fifo = 1; |
|||
} |
|||
*************** |
|||
*** 1100,1123 **** |
|||
nfifo = num_fifos (); |
|||
if (nfifo > ofifo) |
|||
! close_new_fifos ((char *)ofifo_list, osize); |
|||
free ((void *)ofifo_list); |
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
- # if defined (HAVE_DEV_FD) |
|||
- /* Reap process substitutions at the end of loops */ |
|||
- switch (command->type) |
|||
- { |
|||
- case cm_while: |
|||
- case cm_until: |
|||
- case cm_for: |
|||
- case cm_group: |
|||
- # if defined (ARITH_FOR_COMMAND) |
|||
- case cm_arith_for: |
|||
- # endif |
|||
- reap_procsubs (); |
|||
- default: |
|||
- break; |
|||
- } |
|||
- # endif /* HAVE_DEV_FD */ |
|||
#endif |
|||
|
|||
--- 1102,1109 ---- |
|||
nfifo = num_fifos (); |
|||
if (nfifo > ofifo) |
|||
! close_new_fifos ((void *)ofifo_list, osize); |
|||
free ((void *)ofifo_list); |
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
#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 16 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- 26,30 ---- |
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 17 |
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
Loading…
Reference in new issue