Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Sep 2021 18:35:36 GMT
From:      Bryan Drewery <bdrewery@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: e31fb97148f7 - main - read builtin: Empty variables on timeout
Message-ID:  <202109241835.18OIZaEk090751@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by bdrewery:

URL: https://cgit.FreeBSD.org/src/commit/?id=e31fb97148f7a392aaf6cc84579a232f2969b9d1

commit e31fb97148f7a392aaf6cc84579a232f2969b9d1
Author:     Bryan Drewery <bdrewery@FreeBSD.org>
AuthorDate: 2020-05-23 17:01:45 +0000
Commit:     Bryan Drewery <bdrewery@FreeBSD.org>
CommitDate: 2021-09-24 18:34:54 +0000

    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
---
 bin/sh/miscbltin.c             |  2 ++
 bin/sh/tests/builtins/Makefile |  2 ++
 bin/sh/tests/builtins/read10.0 |  8 ++++++++
 bin/sh/tests/builtins/read11.0 | 17 +++++++++++++++++
 4 files changed, 29 insertions(+)

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" ]



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109241835.18OIZaEk090751>