hush: fix "redirects can close script fd" bug
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
29
shell/hush_test/hush-misc/redir_script.tests
Executable file
29
shell/hush_test/hush-misc/redir_script.tests
Executable file
@ -0,0 +1,29 @@
|
||||
# Builds a " 3>&- 4>&-" string.
|
||||
# Note: one of these fds is a directory opened to /proc/self/fd
|
||||
# for globbing. It is unwanted, but I don't know how to filter it out.
|
||||
find_fds() {
|
||||
fds=""
|
||||
for f in /proc/self/fd/*; do
|
||||
test "$f" = "/proc/self/fd/0" && continue
|
||||
test "$f" = "/proc/self/fd/1" && continue
|
||||
test "$f" = "/proc/self/fd/2" && continue
|
||||
fds="$fds ${f##*/}>&-"
|
||||
done
|
||||
}
|
||||
|
||||
find_fds
|
||||
fds1="$fds"
|
||||
|
||||
# One of the fds is open to the script body
|
||||
# Close it while executing something.
|
||||
eval "find_fds $fds"
|
||||
|
||||
# Shell should not lose that fd. Did it?
|
||||
find_fds
|
||||
test x"$fds1" = x"$fds" && { echo "Ok: script fd is not closed"; exit 0; }
|
||||
|
||||
echo "Bug: script fd is closed"
|
||||
echo "fds1:$fds1"
|
||||
echo "fds2:$fds"
|
||||
exit 1
|
||||
|
Reference in New Issue
Block a user