diff options
Diffstat (limited to '')
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 |