11 changed files with 758 additions and 0 deletions
			
			
		| @ -0,0 +1,43 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,104 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,43 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,78 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,45 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,48 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,50 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,177 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,57 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,61 @@ | |||||
|  | 			     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_ */ | ||||
| @ -0,0 +1,52 @@ | |||||
|  | 			     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_ */ | ||||
					Loading…
					
					
				
		Reference in new issue