diff options
author | Bryan Drewery <bdrewery@FreeBSD.org> | 2020-05-23 17:01:45 +0000 |
---|---|---|
committer | Bryan Drewery <bdrewery@FreeBSD.org> | 2021-09-24 18:34:54 +0000 |
commit | e31fb97148f7a392aaf6cc84579a232f2969b9d1 (patch) | |
tree | 2730eede96b044c794007a751b77c08eca66f31a /bin | |
parent | 0389e9be63c5e24ecedbb366c5682ddc2ff4de60 (diff) | |
download | src-e31fb97148f7a392aaf6cc84579a232f2969b9d1.tar.gz src-e31fb97148f7a392aaf6cc84579a232f2969b9d1.zip |
read builtin: Empty variables on timeout
This matches how a non-timeout error is handled.
Reviewed by: jilles
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D31876
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/miscbltin.c | 2 | ||||
-rw-r--r-- | bin/sh/tests/builtins/Makefile | 2 | ||||
-rw-r--r-- | bin/sh/tests/builtins/read10.0 | 8 | ||||
-rw-r--r-- | bin/sh/tests/builtins/read11.0 | 17 |
4 files changed, 29 insertions, 0 deletions
diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c index faccfa92d221..79d7dc097b5c 100644 --- a/bin/sh/miscbltin.c +++ b/bin/sh/miscbltin.c @@ -231,6 +231,8 @@ readcmd(int argc __unused, char **argv __unused) * If there's nothing ready, return an error. */ if (status <= 0) { + while (*ap != NULL) + setvar(*ap++, "", 0); sig = pendingsig; return (128 + (sig != 0 ? sig : SIGALRM)); } diff --git a/bin/sh/tests/builtins/Makefile b/bin/sh/tests/builtins/Makefile index 197d735920e6..f9b464a6da4b 100644 --- a/bin/sh/tests/builtins/Makefile +++ b/bin/sh/tests/builtins/Makefile @@ -141,6 +141,8 @@ ${PACKAGE}FILES+= read6.0 ${PACKAGE}FILES+= read7.0 ${PACKAGE}FILES+= read8.0 ${PACKAGE}FILES+= read9.0 +${PACKAGE}FILES+= read10.0 +${PACKAGE}FILES+= read11.0 ${PACKAGE}FILES+= return1.0 ${PACKAGE}FILES+= return2.1 ${PACKAGE}FILES+= return3.1 diff --git a/bin/sh/tests/builtins/read10.0 b/bin/sh/tests/builtins/read10.0 new file mode 100644 index 000000000000..5fc19896390a --- /dev/null +++ b/bin/sh/tests/builtins/read10.0 @@ -0,0 +1,8 @@ + +set -e + +v=original_value +r=0 +read v < /dev/null || r=$? +[ "$r" -eq 1 ] +[ -z "$v" ] diff --git a/bin/sh/tests/builtins/read11.0 b/bin/sh/tests/builtins/read11.0 new file mode 100644 index 000000000000..c75ed9c92a83 --- /dev/null +++ b/bin/sh/tests/builtins/read11.0 @@ -0,0 +1,17 @@ + +set -e + +T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) +trap 'rm -rf "$T"' 0 +cd $T +mkfifo fifo1 +# Open fifo1 for writing and then read block on a dummy fifo +{ mkfifo fifo2; read dummy <fifo2; } >fifo1 & +# Wait for the child to open fifo1 for writing +exec 3<fifo1 +v=original_value +r=0 +read -t 0 v <&3 || r=$? +kill -TERM "$!" || : +{ [ "$r" -gt 128 ] && [ "$(kill -l "$r")" = ALRM ]; } || exit +[ -z "$v" ] |