summary refs log tree commit diff
path: root/bin/cash/tests/errors
diff options
context:
space:
mode:
Diffstat (limited to 'bin/cash/tests/errors')
-rw-r--r--bin/cash/tests/errors/Makefile35
-rw-r--r--bin/cash/tests/errors/assignment-error1.030
-rw-r--r--bin/cash/tests/errors/assignment-error2.08
-rw-r--r--bin/cash/tests/errors/backquote-error1.04
-rw-r--r--bin/cash/tests/errors/backquote-error2.07
-rw-r--r--bin/cash/tests/errors/bad-binary1.12612
-rw-r--r--bin/cash/tests/errors/bad-keyword1.04
-rw-r--r--bin/cash/tests/errors/bad-parm-exp1.07
-rw-r--r--bin/cash/tests/errors/bad-parm-exp2.22
-rw-r--r--bin/cash/tests/errors/bad-parm-exp2.2.stderr1
-rw-r--r--bin/cash/tests/errors/bad-parm-exp3.22
-rw-r--r--bin/cash/tests/errors/bad-parm-exp3.2.stderr1
-rw-r--r--bin/cash/tests/errors/bad-parm-exp4.22
-rw-r--r--bin/cash/tests/errors/bad-parm-exp4.2.stderr1
-rw-r--r--bin/cash/tests/errors/bad-parm-exp5.22
-rw-r--r--bin/cash/tests/errors/bad-parm-exp5.2.stderr1
-rw-r--r--bin/cash/tests/errors/bad-parm-exp6.22
-rw-r--r--bin/cash/tests/errors/bad-parm-exp6.2.stderr1
-rw-r--r--bin/cash/tests/errors/bad-parm-exp7.04
-rw-r--r--bin/cash/tests/errors/bad-parm-exp8.04
-rw-r--r--bin/cash/tests/errors/option-error.046
-rw-r--r--bin/cash/tests/errors/redirection-error.053
-rw-r--r--bin/cash/tests/errors/redirection-error2.24
-rw-r--r--bin/cash/tests/errors/redirection-error3.054
-rw-r--r--bin/cash/tests/errors/redirection-error4.07
-rw-r--r--bin/cash/tests/errors/redirection-error5.05
-rw-r--r--bin/cash/tests/errors/redirection-error6.012
-rw-r--r--bin/cash/tests/errors/redirection-error7.07
-rw-r--r--bin/cash/tests/errors/redirection-error8.05
-rw-r--r--bin/cash/tests/errors/write-error1.03
30 files changed, 326 insertions, 0 deletions
diff --git a/bin/cash/tests/errors/Makefile b/bin/cash/tests/errors/Makefile
new file mode 100644
index 00000000..4de701b6
--- /dev/null
+++ b/bin/cash/tests/errors/Makefile
@@ -0,0 +1,35 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/Makefile 319575 2017-06-04 20:52:55Z jilles $
+
+PACKAGE=	tests
+
+TESTSDIR=	${TESTSBASE}/bin/sh/${.CURDIR:T}
+
+.PATH: ${.CURDIR:H}
+ATF_TESTS_SH=	functional_test
+
+${PACKAGE}FILES+=		assignment-error1.0
+${PACKAGE}FILES+=		assignment-error2.0
+${PACKAGE}FILES+=		backquote-error1.0
+${PACKAGE}FILES+=		backquote-error2.0
+${PACKAGE}FILES+=		bad-binary1.126
+${PACKAGE}FILES+=		bad-keyword1.0
+${PACKAGE}FILES+=		bad-parm-exp1.0
+${PACKAGE}FILES+=		bad-parm-exp2.2 bad-parm-exp2.2.stderr
+${PACKAGE}FILES+=		bad-parm-exp3.2 bad-parm-exp3.2.stderr
+${PACKAGE}FILES+=		bad-parm-exp4.2 bad-parm-exp4.2.stderr
+${PACKAGE}FILES+=		bad-parm-exp5.2 bad-parm-exp5.2.stderr
+${PACKAGE}FILES+=		bad-parm-exp6.2 bad-parm-exp6.2.stderr
+${PACKAGE}FILES+=		bad-parm-exp7.0
+${PACKAGE}FILES+=		bad-parm-exp8.0
+${PACKAGE}FILES+=		option-error.0
+${PACKAGE}FILES+=		redirection-error.0
+${PACKAGE}FILES+=		redirection-error2.2
+${PACKAGE}FILES+=		redirection-error3.0
+${PACKAGE}FILES+=		redirection-error4.0
+${PACKAGE}FILES+=		redirection-error5.0
+${PACKAGE}FILES+=		redirection-error6.0
+${PACKAGE}FILES+=		redirection-error7.0
+${PACKAGE}FILES+=		redirection-error8.0
+${PACKAGE}FILES+=		write-error1.0
+
+.include <bsd.test.mk>
diff --git a/bin/cash/tests/errors/assignment-error1.0 b/bin/cash/tests/errors/assignment-error1.0
new file mode 100644
index 00000000..029662a6
--- /dev/null
+++ b/bin/cash/tests/errors/assignment-error1.0
@@ -0,0 +1,30 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/assignment-error1.0 213738 2010-10-12 18:20:38Z obrien $
+IFS=,
+
+SPECIAL="break,\
+	:,\
+	continue,\
+	. /dev/null,\
+	eval,\
+	exec,\
+	export -p,\
+	readonly -p,\
+	set,\
+	shift,\
+	times,\
+	trap,\
+	unset foo"
+
+# If there is no command word, the shell must abort on an assignment error.
+${SH} -c "readonly a=0; a=2; exit 0" 2>/dev/null && exit 1
+
+# Special built-in utilities must abort on an assignment error.
+set -- ${SPECIAL}
+for cmd in "$@"
+do
+	${SH} -c "readonly a=0; a=2 ${cmd}; exit 0" 2>/dev/null && exit 1
+done
+
+# Other utilities must not abort; we currently still execute them.
+${SH} -c 'readonly a=0; a=1 true; exit $a' 2>/dev/null || exit 1
+${SH} -c 'readonly a=0; a=1 command :; exit $a' 2>/dev/null || exit 1
diff --git a/bin/cash/tests/errors/assignment-error2.0 b/bin/cash/tests/errors/assignment-error2.0
new file mode 100644
index 00000000..10b7c2ad
--- /dev/null
+++ b/bin/cash/tests/errors/assignment-error2.0
@@ -0,0 +1,8 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/assignment-error2.0 216870 2011-01-01 13:26:18Z jilles $
+
+set -e
+HOME=/
+readonly HOME
+cd /sbin
+{ HOME=/bin cd; } 2>/dev/null || :
+[ "$(pwd)" != /bin ]
diff --git a/bin/cash/tests/errors/backquote-error1.0 b/bin/cash/tests/errors/backquote-error1.0
new file mode 100644
index 00000000..c7d99a87
--- /dev/null
+++ b/bin/cash/tests/errors/backquote-error1.0
@@ -0,0 +1,4 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/backquote-error1.0 213738 2010-10-12 18:20:38Z obrien $
+
+echo 'echo `for` echo ".BAD"CODE.' | ${SH} +m -i 2>&1 | grep -q BADCODE && exit 1
+exit 0
diff --git a/bin/cash/tests/errors/backquote-error2.0 b/bin/cash/tests/errors/backquote-error2.0
new file mode 100644
index 00000000..291cff4a
--- /dev/null
+++ b/bin/cash/tests/errors/backquote-error2.0
@@ -0,0 +1,7 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/backquote-error2.0 213738 2010-10-12 18:20:38Z obrien $
+
+${SH} -c 'echo `echo .BA"DCODE.`
+echo ".BAD"CODE.' 2>&1 | grep -q BADCODE && exit 1
+echo '`"`' | ${SH} -n 2>/dev/null && exit 1
+echo '`'"'"'`' | ${SH} -n 2>/dev/null && exit 1
+exit 0
diff --git a/bin/cash/tests/errors/bad-binary1.126 b/bin/cash/tests/errors/bad-binary1.126
new file mode 100644
index 00000000..fa50fb57
--- /dev/null
+++ b/bin/cash/tests/errors/bad-binary1.126
@@ -0,0 +1,12 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-binary1.126 218320 2011-02-05 12:54:59Z jilles $
+# Checking for binary "scripts" without magic number is permitted but not
+# required by POSIX. However, it is preferable to getting errors like
+# Syntax error: word unexpected (expecting ")")
+# from trying to execute ELF binaries for the wrong architecture.
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+printf '\0echo bad\n' >"$T/testshellproc"
+chmod 755 "$T/testshellproc"
+PATH=$T:$PATH
+testshellproc 2>/dev/null
diff --git a/bin/cash/tests/errors/bad-keyword1.0 b/bin/cash/tests/errors/bad-keyword1.0
new file mode 100644
index 00000000..d89b6c8b
--- /dev/null
+++ b/bin/cash/tests/errors/bad-keyword1.0
@@ -0,0 +1,4 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-keyword1.0 216398 2010-12-12 21:18:16Z jilles $
+
+echo ':; fi' | ${SH} -n 2>/dev/null && exit 1
+exit 0
diff --git a/bin/cash/tests/errors/bad-parm-exp1.0 b/bin/cash/tests/errors/bad-parm-exp1.0
new file mode 100644
index 00000000..b10b13c5
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp1.0
@@ -0,0 +1,7 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp1.0 164004 2006-11-05 18:41:23Z stefanf $
+false && {
+	${}
+	${foo/}
+	${foo@bar}
+}
+:
diff --git a/bin/cash/tests/errors/bad-parm-exp2.2 b/bin/cash/tests/errors/bad-parm-exp2.2
new file mode 100644
index 00000000..5d5e373d
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp2.2
@@ -0,0 +1,2 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp2.2 270101 2014-08-17 14:26:12Z jilles $
+eval '${}'
diff --git a/bin/cash/tests/errors/bad-parm-exp2.2.stderr b/bin/cash/tests/errors/bad-parm-exp2.2.stderr
new file mode 100644
index 00000000..51ea69ca
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp2.2.stderr
@@ -0,0 +1 @@
+eval: ${}: Bad substitution
diff --git a/bin/cash/tests/errors/bad-parm-exp3.2 b/bin/cash/tests/errors/bad-parm-exp3.2
new file mode 100644
index 00000000..942dc83b
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp3.2
@@ -0,0 +1,2 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp3.2 270101 2014-08-17 14:26:12Z jilles $
+eval '${foo/}'
diff --git a/bin/cash/tests/errors/bad-parm-exp3.2.stderr b/bin/cash/tests/errors/bad-parm-exp3.2.stderr
new file mode 100644
index 00000000..70473f9a
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp3.2.stderr
@@ -0,0 +1 @@
+eval: ${foo/}: Bad substitution
diff --git a/bin/cash/tests/errors/bad-parm-exp4.2 b/bin/cash/tests/errors/bad-parm-exp4.2
new file mode 100644
index 00000000..d7e70c65
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp4.2
@@ -0,0 +1,2 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp4.2 270101 2014-08-17 14:26:12Z jilles $
+eval '${foo:@abc}'
diff --git a/bin/cash/tests/errors/bad-parm-exp4.2.stderr b/bin/cash/tests/errors/bad-parm-exp4.2.stderr
new file mode 100644
index 00000000..3363f517
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp4.2.stderr
@@ -0,0 +1 @@
+eval: ${foo:@...}: Bad substitution
diff --git a/bin/cash/tests/errors/bad-parm-exp5.2 b/bin/cash/tests/errors/bad-parm-exp5.2
new file mode 100644
index 00000000..79077c4a
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp5.2
@@ -0,0 +1,2 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp5.2 270101 2014-08-17 14:26:12Z jilles $
+eval '${/}'
diff --git a/bin/cash/tests/errors/bad-parm-exp5.2.stderr b/bin/cash/tests/errors/bad-parm-exp5.2.stderr
new file mode 100644
index 00000000..13763f8e
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp5.2.stderr
@@ -0,0 +1 @@
+eval: ${/}: Bad substitution
diff --git a/bin/cash/tests/errors/bad-parm-exp6.2 b/bin/cash/tests/errors/bad-parm-exp6.2
new file mode 100644
index 00000000..fb18b212
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp6.2
@@ -0,0 +1,2 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp6.2 270101 2014-08-17 14:26:12Z jilles $
+eval '${#foo^}'
diff --git a/bin/cash/tests/errors/bad-parm-exp6.2.stderr b/bin/cash/tests/errors/bad-parm-exp6.2.stderr
new file mode 100644
index 00000000..cc56f65b
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp6.2.stderr
@@ -0,0 +1 @@
+eval: ${foo...}: Bad substitution
diff --git a/bin/cash/tests/errors/bad-parm-exp7.0 b/bin/cash/tests/errors/bad-parm-exp7.0
new file mode 100644
index 00000000..f47ac84c
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp7.0
@@ -0,0 +1,4 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp7.0 287081 2015-08-23 20:44:53Z jilles $
+
+v=1
+eval ": $(printf '${v-${\372}}')"
diff --git a/bin/cash/tests/errors/bad-parm-exp8.0 b/bin/cash/tests/errors/bad-parm-exp8.0
new file mode 100644
index 00000000..59aa8f6b
--- /dev/null
+++ b/bin/cash/tests/errors/bad-parm-exp8.0
@@ -0,0 +1,4 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/bad-parm-exp8.0 287081 2015-08-23 20:44:53Z jilles $
+
+v=1
+eval ": $(printf '${v-${w\372}}')"
diff --git a/bin/cash/tests/errors/option-error.0 b/bin/cash/tests/errors/option-error.0
new file mode 100644
index 00000000..dbfc81df
--- /dev/null
+++ b/bin/cash/tests/errors/option-error.0
@@ -0,0 +1,46 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/option-error.0 213738 2010-10-12 18:20:38Z obrien $
+IFS=,
+
+SPECIAL="break abc,\
+	continue abc,\
+	.,
+	exit abc,
+	export -x,
+	readonly -x,
+	return abc,
+	set -z,
+	shift abc,
+	trap -y,
+	unset -y"
+
+UTILS="alias -y,\
+	cat -z,\
+	cd abc def,\
+	command break abc,\
+	expr 1 +,\
+	fc -z,\
+	getopts,\
+	hash -z,\
+	jobs -z,\
+	printf,\
+	pwd abc,\
+	read,\
+	test abc =,\
+	ulimit -z,\
+	umask -z,\
+	unalias -z,\
+	wait abc"
+
+# Special built-in utilities must abort on an option or operand error.
+set -- ${SPECIAL}
+for cmd in "$@"
+do
+	${SH} -c "${cmd}; exit 0" 2>/dev/null && exit 1
+done
+
+# Other utilities must not abort.
+set -- ${UTILS}
+for cmd in "$@"
+do
+	${SH} -c "${cmd}; exit 0" 2>/dev/null || exit 1
+done
diff --git a/bin/cash/tests/errors/redirection-error.0 b/bin/cash/tests/errors/redirection-error.0
new file mode 100644
index 00000000..5dfd7f65
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error.0
@@ -0,0 +1,53 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error.0 213738 2010-10-12 18:20:38Z obrien $
+IFS=,
+
+SPECIAL="break,\
+	:,\
+	continue,\
+	. /dev/null,
+	eval,
+	exec,
+	export -p,
+	readonly -p,
+	set,
+	shift,
+	times,
+	trap,
+	unset foo"
+
+UTILS="alias,\
+	bg,\
+	bind,\
+	cd,\
+	command echo,\
+	echo,\
+	false,\
+	fc -l,\
+	fg,\
+	getopts a -a,\
+	hash,\
+	jobs,\
+	printf a,\
+	pwd,\
+	read var < /dev/null,\
+	test,\
+	true,\
+	type ls,\
+	ulimit,\
+	umask,\
+	unalias -a,\
+	wait"
+
+# Special built-in utilities must abort on a redirection error.
+set -- ${SPECIAL}
+for cmd in "$@"
+do
+	${SH} -c "${cmd} > /; exit 0" 2>/dev/null && exit 1
+done
+
+# Other utilities must not abort.
+set -- ${UTILS}
+for cmd in "$@"
+do
+	${SH} -c "${cmd} > /; exit 0" 2>/dev/null || exit 1
+done
diff --git a/bin/cash/tests/errors/redirection-error2.2 b/bin/cash/tests/errors/redirection-error2.2
new file mode 100644
index 00000000..066f393a
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error2.2
@@ -0,0 +1,4 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error2.2 213738 2010-10-12 18:20:38Z obrien $
+
+# sh should fail gracefully on this bad redirect
+${SH} -c 'echo 1 >&$a' 2>/dev/null
diff --git a/bin/cash/tests/errors/redirection-error3.0 b/bin/cash/tests/errors/redirection-error3.0
new file mode 100644
index 00000000..c20e6adc
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error3.0
@@ -0,0 +1,54 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error3.0 213738 2010-10-12 18:20:38Z obrien $
+IFS=,
+
+SPECIAL="break,\
+	:,\
+	continue,\
+	. /dev/null,\
+	eval,\
+	exec,\
+	export -p,\
+	readonly -p,\
+	set,\
+	shift,\
+	times,\
+	trap,\
+	unset foo"
+
+UTILS="alias,\
+	bg,\
+	bind,\
+	cd,\
+	command echo,\
+	echo,\
+	false,\
+	fc -l,\
+	fg,\
+	getopts a -a,\
+	hash,\
+	jobs,\
+	printf a,\
+	pwd,\
+	read var < /dev/null,\
+	test,\
+	true,\
+	type ls,\
+	ulimit,\
+	umask,\
+	unalias -a,\
+	wait"
+
+# When used with 'command', neither special built-in utilities nor other
+# utilities must abort on a redirection error.
+
+set -- ${SPECIAL}
+for cmd in "$@"
+do
+	${SH} -c "command ${cmd} > /; exit 0" 2>/dev/null || exit 1
+done
+
+set -- ${UTILS}
+for cmd in "$@"
+do
+	${SH} -c "command ${cmd} > /; exit 0" 2>/dev/null || exit 1
+done
diff --git a/bin/cash/tests/errors/redirection-error4.0 b/bin/cash/tests/errors/redirection-error4.0
new file mode 100644
index 00000000..86b11c5c
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error4.0
@@ -0,0 +1,7 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error4.0 205138 2010-03-13 22:53:17Z jilles $
+# A redirection error should not abort the shell if there is no command word.
+exec 2>/dev/null
+</var/empty/x
+</var/empty/x y=2
+y=2 </var/empty/x
+exit 0
diff --git a/bin/cash/tests/errors/redirection-error5.0 b/bin/cash/tests/errors/redirection-error5.0
new file mode 100644
index 00000000..5664744d
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error5.0
@@ -0,0 +1,5 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error5.0 205153 2010-03-14 13:51:12Z jilles $
+# A redirection error on a subshell should not abort the shell.
+exec 2>/dev/null
+( echo bad ) </var/empty/x
+exit 0
diff --git a/bin/cash/tests/errors/redirection-error6.0 b/bin/cash/tests/errors/redirection-error6.0
new file mode 100644
index 00000000..7bbc808a
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error6.0
@@ -0,0 +1,12 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error6.0 205154 2010-03-14 14:24:35Z jilles $
+# A redirection error on a compound command should not abort the shell.
+exec 2>/dev/null
+{ echo bad; } </var/empty/x
+if :; then echo bad; fi </var/empty/x
+for i in 1; do echo bad; done </var/empty/x
+i=0
+while [ $i = 0 ]; do echo bad; i=1; done </var/empty/x
+i=0
+until [ $i != 0 ]; do echo bad; i=1; done </var/empty/x
+case i in *) echo bad ;; esac </var/empty/x
+exit 0
diff --git a/bin/cash/tests/errors/redirection-error7.0 b/bin/cash/tests/errors/redirection-error7.0
new file mode 100644
index 00000000..d0d67105
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error7.0
@@ -0,0 +1,7 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error7.0 216851 2010-12-31 18:20:17Z jilles $
+
+! dummy=$(
+	exec 3>&1 >&2 2>&3
+	ulimit -n 9
+	exec 9<.
+) && [ -n "$dummy" ]
diff --git a/bin/cash/tests/errors/redirection-error8.0 b/bin/cash/tests/errors/redirection-error8.0
new file mode 100644
index 00000000..a1f33077
--- /dev/null
+++ b/bin/cash/tests/errors/redirection-error8.0
@@ -0,0 +1,5 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/redirection-error8.0 319575 2017-06-04 20:52:55Z jilles $
+
+$SH -c '{ { :; } </var/empty/x; } 2>/dev/null || kill -INT $$; echo continued'
+r=$?
+[ "$r" -gt 128 ] && [ "$(kill -l "$r")" = INT ]
diff --git a/bin/cash/tests/errors/write-error1.0 b/bin/cash/tests/errors/write-error1.0
new file mode 100644
index 00000000..a35bfa7a
--- /dev/null
+++ b/bin/cash/tests/errors/write-error1.0
@@ -0,0 +1,3 @@
+# $FreeBSD: releng/12.0/bin/sh/tests/errors/write-error1.0 244924 2013-01-01 12:48:24Z jilles $
+
+! echo >&- 2>/dev/null