diff options
Diffstat (limited to 'core/bash/bash53-016')
| -rw-r--r-- | core/bash/bash53-016 | 136 |
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_ */ |
