]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
bash: Update to include patches 27 to 32
authorAdolf Belka <adolf.belka@ipfire.org>
Tue, 13 Aug 2024 16:19:36 +0000 (18:19 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 14 Aug 2024 09:07:16 +0000 (09:07 +0000)
- Update from patches 1-26 to 1-32
- Update of rootfile not required
- Changelog of patches
   27 The configure test for the presence of strtoimax(3) is inverted.
   28 A DEBUG trap in an asynchronous process can steal the controlling terminal
away from the calling shell, causing it to exit.
   29 There are problems with recovery after parser errors when parsing compound
assignments. For instance, the `local' builtin reports an error but never
cleans up the function context.
   30 `wait -n' can fail to return some jobs if they exit due to signals the shell
does not report to the user.
   31 There is a memory leak in the code that implements the optimized $(<file)
expansion for some code paths.
   32 When printing functions containing coprocesses, the displayed coproc command
has the word COPROC inserted unconditionally, resulting in function bodies
that cannot be re-read as input.

Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
lfs/bash
src/patches/bash/bash52-027 [new file with mode: 0644]
src/patches/bash/bash52-028 [new file with mode: 0644]
src/patches/bash/bash52-029 [new file with mode: 0644]
src/patches/bash/bash52-030 [new file with mode: 0644]
src/patches/bash/bash52-031 [new file with mode: 0644]
src/patches/bash/bash52-032 [new file with mode: 0644]

index c66f6a8e17855322fbb522eb41d2a0e0d9a78864..f3948c7e54383a29f580287692055c4cf32635db 100644 (file)
--- a/lfs/bash
+++ b/lfs/bash
@@ -91,7 +91,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-profile-1.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-3.2-ssh_source_bash.patch
        
-       for i in $$(seq 1 26); do \
+       for i in $$(seq 1 32); do \
        cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash52-$$(printf "%03d" "$${i}") || exit 1; \
        done
 
diff --git a/src/patches/bash/bash52-027 b/src/patches/bash/bash52-027
new file mode 100644 (file)
index 0000000..9f18676
--- /dev/null
@@ -0,0 +1,63 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-027
+
+Bug-Reported-by:       Emanuel Haupt <ehaupt@FreeBSD.org>
+Bug-Reference-ID:      <20221001123841.27e1bfb3bf3ed58ab32ea2b5@FreeBSD.org>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00000.html
+
+Bug-Description:
+
+The configure test for the presence of strtoimax(3) is inverted.
+
+Patch (apply with `patch -p0'):
+
+
+*** ../bash-5.2-patched/m4/strtoimax.m4        Mon Apr 11 16:31:52 2022
+--- m4/strtoimax.m4    Tue Apr  9 11:12:36 2024
+***************
+*** 30,34 ****
+  ])
+  AC_MSG_RESULT($bash_cv_func_strtoimax)
+! if test $bash_cv_func_strtoimax = yes; then
+  AC_LIBOBJ(strtoimax)
+  fi
+--- 30,34 ----
+  ])
+  AC_MSG_RESULT($bash_cv_func_strtoimax)
+! if test $bash_cv_func_strtoimax = no; then
+  AC_LIBOBJ(strtoimax)
+  fi
+*** ..//bash-5.2-patched/configure     Fri Sep 23 10:13:22 2022
+--- configure  Tue Apr  9 11:13:21 2024
+***************
+*** 20444,20448 ****
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strtoimax" >&5
+  printf "%s\n" "$bash_cv_func_strtoimax" >&6; }
+! if test $bash_cv_func_strtoimax = yes; then
+  case " $LIBOBJS " in
+    *" strtoimax.$ac_objext "* ) ;;
+--- 20444,20448 ----
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strtoimax" >&5
+  printf "%s\n" "$bash_cv_func_strtoimax" >&6; }
+! if test $bash_cv_func_strtoimax = no; then
+  case " $LIBOBJS " in
+    *" strtoimax.$ac_objext "* ) ;;
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 26
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 27
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-028 b/src/patches/bash/bash52-028
new file mode 100644 (file)
index 0000000..806bdc5
--- /dev/null
@@ -0,0 +1,49 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-028
+
+Bug-Reported-by:       Mark March <march@systempad.cloud>
+Bug-Reference-ID:      <834896722.6304071.1718744118467@mail.yahoo.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2024-06/msg00122.html
+
+Bug-Description:
+
+A DEBUG trap in an asynchronous process can steal the controlling terminal
+away from the calling shell, causing it to exit.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-20240609/trap.c    Fri May  3 12:12:38 2024
+--- trap.c     Wed Jun 26 10:41:40 2024
+***************
+*** 1217,1221 ****
+        restore_pgrp_pipe (save_pipe);
+  #  endif
+!       if (pipeline_pgrp > 0 && ((subshell_environment & (SUBSHELL_ASYNC|SUBSHELL_PIPE)) == 0))
+       give_terminal_to (pipeline_pgrp, 1);
+  
+--- 1217,1223 ----
+        restore_pgrp_pipe (save_pipe);
+  #  endif
+!       /* If the trap command gave the terminal to another process group,
+!       restore it. XXX - check running_in_background? */
+!       if (job_control && pipeline_pgrp > 0 && ((subshell_environment & (SUBSHELL_ASYNC|SUBSHELL_PIPE)) == 0))
+       give_terminal_to (pipeline_pgrp, 1);
+  
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 27
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 28
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-029 b/src/patches/bash/bash52-029
new file mode 100644 (file)
index 0000000..7c816ea
--- /dev/null
@@ -0,0 +1,137 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-029
+
+Bug-Reported-by:       Grisha Levit <grishalevit@gmail.com>
+Bug-Reference-ID:      <CAMu=Brp9QHvLh8vbY45hRgCVaQUNSnU7n8EVjsWKajT7c99K8Q@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-04/msg00072.html
+
+Bug-Description:
+
+There are problems with recovery after parser errors when parsing compound
+assignments. For instance, the `local' builtin reports an error but never
+cleans up the function context.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-20230427/parse.y   Fri Apr 14 11:50:29 2023
+--- parse.y    Mon May  1 16:25:14 2023
+***************
+*** 6471,6478 ****
+      {
+        set_exit_status (EXECUTION_FAILURE);
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      jump_to_top_level (DISCARD);
+      }
+  
+--- 6471,6483 ----
+      {
+        set_exit_status (EXECUTION_FAILURE);
++       current_token = '\n';  /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      {
+!        if (executing && parse_and_execute_level == 0)
+!          top_level_cleanup ();
+!        jump_to_top_level (DISCARD);
+!      }
+      }
+  
+***************
+*** 6538,6546 ****
+      {
+        set_exit_status (EXECUTION_FAILURE);
+!       last_read_token = '\n';        /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      jump_to_top_level (DISCARD);
+      }
+  
+--- 6543,6555 ----
+      {
+        set_exit_status (EXECUTION_FAILURE);
+!       last_read_token = current_token = '\n';        /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      {
+!        if (executing && parse_and_execute_level == 0)
+!          top_level_cleanup ();
+!        jump_to_top_level (DISCARD);
+!      }
+      }
+  
+
+*** ../bash-20230427/y.tab.c   Tue Jul 30 15:19:31 2024
+--- y.tab.c    Tue Jul 30 15:20:21 2024
+***************
+*** 8786,8793 ****
+      {
+        set_exit_status (EXECUTION_FAILURE);
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      jump_to_top_level (DISCARD);
+      }
+  
+--- 8786,8798 ----
+      {
+        set_exit_status (EXECUTION_FAILURE);
++       current_token = '\n';  /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      {
+!        if (executing && parse_and_execute_level == 0)
+!          top_level_cleanup ();
+!        jump_to_top_level (DISCARD);
+!      }
+      }
+  
+***************
+*** 8853,8861 ****
+      {
+        set_exit_status (EXECUTION_FAILURE);
+!       last_read_token = '\n';        /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      jump_to_top_level (DISCARD);
+      }
+  
+--- 8858,8870 ----
+      {
+        set_exit_status (EXECUTION_FAILURE);
+!       last_read_token = current_token = '\n';        /* XXX */
+        if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+        else
+!      {
+!        if (executing && parse_and_execute_level == 0)
+!          top_level_cleanup ();
+!        jump_to_top_level (DISCARD);
+!      }
+      }
+  
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 28
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 29
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-030 b/src/patches/bash/bash52-030
new file mode 100644 (file)
index 0000000..20b8f24
--- /dev/null
@@ -0,0 +1,130 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-030
+
+Bug-Reported-by:       Steven Pelley <stevenpelley@gmail.com>
+Bug-Reference-ID:      <CAGOYURh6CKaE-D0Z8puP-tQknavCQNRHo02vpvgMQqaTG3_cRw@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2024-01/msg00104.html
+
+Bug-Description:
+
+`wait -n' can fail to return some jobs if they exit due to signals the shell
+does not report to the user.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/jobs.c Thu Nov  9 14:59:14 2023
+--- jobs.c     Tue Jul 30 15:27:44 2024
+***************
+*** 4275,4279 ****
+               ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job)))
+           continue;
+!        
+         /* If job control is disabled, don't print the status messages.
+            Mark dead jobs as notified so that they get cleaned up.  If
+--- 4288,4312 ----
+               ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job)))
+           continue;
+! 
+!        /* Do the same thing and don't print anything or mark as notified
+!           for the signals we're not going to report on. This is the opposite
+!           of the first two cases under case JDEAD below. */
+!        else if (interactive_shell == 0 && DEADJOB (job) && IS_FOREGROUND (job) == 0 &&
+!              WIFSIGNALED (s) && (termsig == SIGINT
+! #if defined (DONT_REPORT_SIGTERM)
+!              || termsig == SIGTERM
+! #endif
+! #if defined (DONT_REPORT_SIGPIPE)
+!              || termsig == SIGPIPE
+! #endif
+!              || signal_is_trapped (termsig)))
+!          continue;
+! 
+!        /* hang onto the status if the shell is running -c command */
+!        else if (startup_state == 2 && subshell_environment == 0 &&
+!              WIFSIGNALED (s) == 0 &&
+!              ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job)))
+!          continue;
+! 
+         /* If job control is disabled, don't print the status messages.
+            Mark dead jobs as notified so that they get cleaned up.  If
+***************
+*** 4298,4302 ****
+         /* Print info on jobs that are running in the background,
+            and on foreground jobs that were killed by anything
+!           except SIGINT (and possibly SIGPIPE). */
+         switch (JOBSTATE (job))
+           {
+--- 4331,4335 ----
+         /* Print info on jobs that are running in the background,
+            and on foreground jobs that were killed by anything
+!           except SIGINT (and possibly SIGTERM and SIGPIPE). */
+         switch (JOBSTATE (job))
+           {
+***************
+*** 4318,4321 ****
+--- 4351,4355 ----
+             else if (IS_FOREGROUND (job))
+               {
++                /* foreground jobs, interactive and non-interactive shells */
+  #if !defined (DONT_REPORT_SIGPIPE)
+                 if (termsig && WIFSIGNALED (s) && termsig != SIGINT)
+***************
+*** 4331,4337 ****
+                     fprintf (stderr, "\n");
+                   }
+               }
+!            else if (job_control)     /* XXX job control test added */
+               {
+                 if (dir == 0)
+                   dir = current_working_directory ();
+--- 4365,4375 ----
+                     fprintf (stderr, "\n");
+                   }
++                /* foreground jobs that exit cleanly */
++                jobs[job]->flags |= J_NOTIFIED;
+               }
+!            else if (job_control)
+               {
++                /* background jobs with job control, interactive and
++                   non-interactive shells */
+                 if (dir == 0)
+                   dir = current_working_directory ();
+***************
+*** 4342,4346 ****
+               }
+  
+!            jobs[job]->flags |= J_NOTIFIED;
+             break;
+  
+--- 4380,4391 ----
+               }
+  
+!            /* Interactive shells without job control enabled are handled
+!               above. */
+!            /* XXX - this is a catch-all in case we missed a state */
+!            else
+! {
+! internal_debug("notify_of_job_status: catch-all setting J_NOTIFIED on job %d (%d), startup state = %d", job, jobs[job]->flags, startup_state);
+!              jobs[job]->flags |= J_NOTIFIED;
+! }
+             break;
+  
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 29
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 30
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-031 b/src/patches/bash/bash52-031
new file mode 100644 (file)
index 0000000..0210bb2
--- /dev/null
@@ -0,0 +1,46 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-031
+
+Bug-Reported-by:       Grisha Levit <grishalevit@gmail.com>
+Bug-Reference-ID:      <CAMu=BrrD52xxF7C9Ke1fosAurHq1kz82t7FcHsrPBw9CbAst6A@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-06/msg00045.html
+
+Bug-Description:
+
+There is a memory leak in the code that implements the optimized $(<file)
+expansion for some code paths.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/builtins/evalstring.c  Tue Dec 13 12:53:21 2022
+--- builtins/evalstring.c      Tue Nov 28 17:25:39 2023
+***************
+*** 763,766 ****
+--- 773,779 ----
+    if (fnp)
+      *fnp = fn;
++   else
++     free (fn);
++ 
+    return fd;
+  }
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 30
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 31
+  
+  #endif /* _PATCHLEVEL_H_ */
+
diff --git a/src/patches/bash/bash52-032 b/src/patches/bash/bash52-032
new file mode 100644 (file)
index 0000000..618a37f
--- /dev/null
@@ -0,0 +1,51 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-032
+
+Bug-Reported-by:       Albert Akchurin <ackbeat@gmail.com>
+Bug-Reference-ID:      Mon, 11 Dec 2023 20:41:58 +0600
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-12/msg00047.html
+
+Bug-Description:
+
+Patch (apply with `patch -p0'):
+
+When printing functions containing coprocesses, the displayed coproc command
+has the word COPROC inserted unconditionally, resulting in function bodies
+that cannot be re-read as input.
+
+*** ../bash-5.2-patched/print_cmd.c    Mon Aug 21 16:09:44 2023
+--- print_cmd.c        Mon Dec 11 15:34:30 2023
+***************
+*** 357,361 ****
+  
+       case cm_coproc:
+!        cprintf ("coproc %s ", command->value.Coproc->name);
+         skip_this_indent++;
+         make_command_string_internal (command->value.Coproc->command);
+--- 357,363 ----
+  
+       case cm_coproc:
+!        cprintf ("coproc ");
+!        if (command->value.Coproc->command->type != cm_simple)
+!          cprintf ("%s ", command->value.Coproc->name);
+         skip_this_indent++;
+         make_command_string_internal (command->value.Coproc->command);
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 31
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 32
+  
+  #endif /* _PATCHLEVEL_H_ */