From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-016 Signed-off-by: Fabrice Fontaine 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 --- b/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 --- b/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_ */