summaryrefslogtreecommitdiff
path: root/core/bash/bash53-016
diff options
context:
space:
mode:
Diffstat (limited to 'core/bash/bash53-016')
-rw-r--r--core/bash/bash53-016136
1 files changed, 136 insertions, 0 deletions
diff --git a/core/bash/bash53-016 b/core/bash/bash53-016
new file mode 100644
index 0000000..6aff324
--- /dev/null
+++ b/core/bash/bash53-016
@@ -0,0 +1,136 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.3
+Patch-ID: bash53-016
+
+Bug-Reported-by: Ethan Pini <ethan@pini.dev>
+Bug-Reference-ID: <sm8ZxfcmgU7_eiVLIsjNlax7oyAwwe1_uk2vaO0hp6nypbGnV7WStfE3rrHg_RV8BMSNRhhQmS2-7TpvzPxuK1NLLEWAyL9kbsZ2cA3nqIg=@pini.dev>
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2026-06/msg00126.html
+
+Bug-Description:
+
+On recent versions of macOS, the pipe size is dynamic and changes due to
+system-wide total pipe usage, so we have to check whether or not bash can
+use the size determined at compile time.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.3-patched/redir.c Fri Mar 7 18:49:37 2025
+--- redir.c Tue Jul 7 11:21:09 2026
+***************
+*** 473,477 ****
+--- 473,500 ----
+ #endif
+
++ #if defined (PIPESIZE_DYNAMIC)
++ /* If we can't count on the pipe size determined at compile time to be
++ constant across systems, define PIPESIZE_DYNAMIC in configure.ac.
++ We set the pipe's write end to be non-blocking, try to write, and
++ fall back to a temp file on error. */
++ if (sh_setnodelay (herepipe[1]) < 0)
++ {
++ close (herepipe[0]);
++ close (herepipe[1]);
++ goto use_tempfile;
++ }
++ #endif
++
+ r = heredoc_write (herepipe[1], document, document_len);
++
++ #if defined (PIPESIZE_DYNAMIC)
++ if (r == ENOSPC || r == EAGAIN)
++ {
++ close (herepipe[0]);
++ close (herepipe[1]);
++ goto use_tempfile;
++ }
++ #endif
++
+ if (document != redirectee->word)
+ free (document);
+*** ../bash-5.3-patched/general.c Wed Jun 25 15:54:35 2025
+--- general.c Tue Jul 7 11:12:10 2026
+***************
+*** 596,599 ****
+--- 596,620 ----
+ }
+
++ int
++ sh_setnodelay (int fd)
++ {
++ int flags;
++
++ if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
++ return -1;
++
++ /* This is defined to O_NDELAY in filecntl.h if O_NONBLOCK is not present
++ and O_NDELAY is defined. */
++ #ifdef O_NONBLOCK
++ flags |= O_NONBLOCK;
++ #endif
++
++ #ifdef O_NDELAY
++ flags |= O_NDELAY;
++ #endif
++
++ return (fcntl (fd, F_SETFL, flags));
++ }
++
+ /* Just a wrapper for the define in include/filecntl.h */
+ int
+*** ../bash-5.3-patched/general.h Wed Jun 25 15:52:47 2025
+--- general.h Tue Jul 7 11:13:48 2026
+***************
+*** 318,321 ****
+--- 318,322 ----
+
+ extern int sh_unset_nodelay_mode (int);
++ extern int sh_setnodelay (int);
+ extern int sh_setclexec (int);
+ extern int sh_validfd (int);
+*** ../bash-5.3-patched/configure.ac Mon Jun 30 10:05:24 2025
+--- configure.ac Tue Jul 7 11:25:32 2026
+***************
+*** 1210,1214 ****
+ isc*) LOCAL_CFLAGS=-Disc386 ;;
+ rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
+! darwin*) LOCAL_CFLAGS=-DMACOSX ;;
+ sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;;
+ sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;;
+--- 1210,1214 ----
+ isc*) LOCAL_CFLAGS=-Disc386 ;;
+ rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
+! darwin*) LOCAL_CFLAGS="-DMACOSX -DPIPESIZE_DYNAMIC" ;;
+ sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;;
+ sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;;
+*** ../bash-5.3-patched/configure Mon Jun 30 10:05:30 2025
+--- configure Tue Jul 7 11:25:36 2026
+***************
+*** 23134,23138 ****
+ isc*) LOCAL_CFLAGS=-Disc386 ;;
+ rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
+! darwin*) LOCAL_CFLAGS=-DMACOSX ;;
+ sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;;
+ sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;;
+--- 23134,23138 ----
+ isc*) LOCAL_CFLAGS=-Disc386 ;;
+ rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
+! darwin*) LOCAL_CFLAGS="-DMACOSX -DPIPESIZE_DYNAMIC" ;;
+ sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;;
+ sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;;
+*** ../bash-5.3/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 15
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 16
+
+ #endif /* _PATCHLEVEL_H_ */