diff options
Diffstat (limited to 'bin/sh/tests/errors')
27 files changed, 308 insertions, 0 deletions
diff --git a/bin/sh/tests/errors/Makefile b/bin/sh/tests/errors/Makefile new file mode 100644 index 0000000..9f8b0f2 --- /dev/null +++ b/bin/sh/tests/errors/Makefile @@ -0,0 +1,30 @@ +# $FreeBSD$ + +.include <bsd.own.mk> + +FILESDIR= ${TESTSBASE}/bin/sh/errors +KYUAFILE= no + +FILES= assignment-error1.0 +FILES+= assignment-error2.0 +FILES+= backquote-error1.0 +FILES+= backquote-error2.0 +FILES+= bad-binary1.126 +FILES+= bad-keyword1.0 +FILES+= bad-parm-exp1.0 +FILES+= bad-parm-exp2.2 bad-parm-exp2.2.stderr +FILES+= bad-parm-exp3.2 bad-parm-exp3.2.stderr +FILES+= bad-parm-exp4.2 bad-parm-exp4.2.stderr +FILES+= bad-parm-exp5.2 bad-parm-exp5.2.stderr +FILES+= bad-parm-exp6.2 bad-parm-exp6.2.stderr +FILES+= option-error.0 +FILES+= redirection-error.0 +FILES+= redirection-error2.2 +FILES+= redirection-error3.0 +FILES+= redirection-error4.0 +FILES+= redirection-error5.0 +FILES+= redirection-error6.0 +FILES+= redirection-error7.0 +FILES+= write-error1.0 + +.include <bsd.test.mk> diff --git a/bin/sh/tests/errors/assignment-error1.0 b/bin/sh/tests/errors/assignment-error1.0 new file mode 100644 index 0000000..00eaed9 --- /dev/null +++ b/bin/sh/tests/errors/assignment-error1.0 @@ -0,0 +1,30 @@ +# $FreeBSD$ +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/sh/tests/errors/assignment-error2.0 b/bin/sh/tests/errors/assignment-error2.0 new file mode 100644 index 0000000..ff4e629 --- /dev/null +++ b/bin/sh/tests/errors/assignment-error2.0 @@ -0,0 +1,8 @@ +# $FreeBSD$ + +set -e +HOME=/ +readonly HOME +cd /sbin +{ HOME=/bin cd; } 2>/dev/null || : +[ "$(pwd)" != /bin ] diff --git a/bin/sh/tests/errors/backquote-error1.0 b/bin/sh/tests/errors/backquote-error1.0 new file mode 100644 index 0000000..43e3303 --- /dev/null +++ b/bin/sh/tests/errors/backquote-error1.0 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +echo 'echo `for` echo ".BAD"CODE.' | ${SH} +m -i 2>&1 | grep -q BADCODE && exit 1 +exit 0 diff --git a/bin/sh/tests/errors/backquote-error2.0 b/bin/sh/tests/errors/backquote-error2.0 new file mode 100644 index 0000000..5b49e2b --- /dev/null +++ b/bin/sh/tests/errors/backquote-error2.0 @@ -0,0 +1,7 @@ +# $FreeBSD$ + +${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/sh/tests/errors/bad-binary1.126 b/bin/sh/tests/errors/bad-binary1.126 new file mode 100644 index 0000000..d92e9de --- /dev/null +++ b/bin/sh/tests/errors/bad-binary1.126 @@ -0,0 +1,12 @@ +# $FreeBSD$ +# 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/sh/tests/errors/bad-keyword1.0 b/bin/sh/tests/errors/bad-keyword1.0 new file mode 100644 index 0000000..ac01536 --- /dev/null +++ b/bin/sh/tests/errors/bad-keyword1.0 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +echo ':; fi' | ${SH} -n 2>/dev/null && exit 1 +exit 0 diff --git a/bin/sh/tests/errors/bad-parm-exp1.0 b/bin/sh/tests/errors/bad-parm-exp1.0 new file mode 100644 index 0000000..6e94994 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp1.0 @@ -0,0 +1,7 @@ +# $FreeBSD$ +false && { + ${} + ${foo/} + ${foo@bar} +} +: diff --git a/bin/sh/tests/errors/bad-parm-exp2.2 b/bin/sh/tests/errors/bad-parm-exp2.2 new file mode 100644 index 0000000..7e13d2b --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp2.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${} diff --git a/bin/sh/tests/errors/bad-parm-exp2.2.stderr b/bin/sh/tests/errors/bad-parm-exp2.2.stderr new file mode 100644 index 0000000..d027a5a --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp2.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp2.2: ${}: Bad substitution diff --git a/bin/sh/tests/errors/bad-parm-exp3.2 b/bin/sh/tests/errors/bad-parm-exp3.2 new file mode 100644 index 0000000..a5ecba5 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp3.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${foo/} diff --git a/bin/sh/tests/errors/bad-parm-exp3.2.stderr b/bin/sh/tests/errors/bad-parm-exp3.2.stderr new file mode 100644 index 0000000..ef40251 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp3.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp3.2: ${foo/}: Bad substitution diff --git a/bin/sh/tests/errors/bad-parm-exp4.2 b/bin/sh/tests/errors/bad-parm-exp4.2 new file mode 100644 index 0000000..9eec8d0 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp4.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${foo:@abc} diff --git a/bin/sh/tests/errors/bad-parm-exp4.2.stderr b/bin/sh/tests/errors/bad-parm-exp4.2.stderr new file mode 100644 index 0000000..89bd80f --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp4.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp4.2: ${foo:@...}: Bad substitution diff --git a/bin/sh/tests/errors/bad-parm-exp5.2 b/bin/sh/tests/errors/bad-parm-exp5.2 new file mode 100644 index 0000000..459281f --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp5.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${/} diff --git a/bin/sh/tests/errors/bad-parm-exp5.2.stderr b/bin/sh/tests/errors/bad-parm-exp5.2.stderr new file mode 100644 index 0000000..89b1997 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp5.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp5.2: ${/}: Bad substitution diff --git a/bin/sh/tests/errors/bad-parm-exp6.2 b/bin/sh/tests/errors/bad-parm-exp6.2 new file mode 100644 index 0000000..ba51442 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp6.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${#foo^} diff --git a/bin/sh/tests/errors/bad-parm-exp6.2.stderr b/bin/sh/tests/errors/bad-parm-exp6.2.stderr new file mode 100644 index 0000000..dbf14b5 --- /dev/null +++ b/bin/sh/tests/errors/bad-parm-exp6.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp6.2: ${foo...}: Bad substitution diff --git a/bin/sh/tests/errors/option-error.0 b/bin/sh/tests/errors/option-error.0 new file mode 100644 index 0000000..b4b44c4 --- /dev/null +++ b/bin/sh/tests/errors/option-error.0 @@ -0,0 +1,46 @@ +# $FreeBSD$ +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/sh/tests/errors/redirection-error.0 b/bin/sh/tests/errors/redirection-error.0 new file mode 100644 index 0000000..cb8c0b1 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error.0 @@ -0,0 +1,53 @@ +# $FreeBSD$ +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/sh/tests/errors/redirection-error2.2 b/bin/sh/tests/errors/redirection-error2.2 new file mode 100644 index 0000000..32bccd8 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error2.2 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +# sh should fail gracefully on this bad redirect +${SH} -c 'echo 1 >&$a' 2>/dev/null diff --git a/bin/sh/tests/errors/redirection-error3.0 b/bin/sh/tests/errors/redirection-error3.0 new file mode 100644 index 0000000..8a07d03 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error3.0 @@ -0,0 +1,54 @@ +# $FreeBSD$ +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/sh/tests/errors/redirection-error4.0 b/bin/sh/tests/errors/redirection-error4.0 new file mode 100644 index 0000000..2060974 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error4.0 @@ -0,0 +1,7 @@ +# $FreeBSD$ +# 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/sh/tests/errors/redirection-error5.0 b/bin/sh/tests/errors/redirection-error5.0 new file mode 100644 index 0000000..1fcd47e --- /dev/null +++ b/bin/sh/tests/errors/redirection-error5.0 @@ -0,0 +1,5 @@ +# $FreeBSD$ +# 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/sh/tests/errors/redirection-error6.0 b/bin/sh/tests/errors/redirection-error6.0 new file mode 100644 index 0000000..17d1109 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error6.0 @@ -0,0 +1,12 @@ +# $FreeBSD$ +# 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/sh/tests/errors/redirection-error7.0 b/bin/sh/tests/errors/redirection-error7.0 new file mode 100644 index 0000000..5b20f04 --- /dev/null +++ b/bin/sh/tests/errors/redirection-error7.0 @@ -0,0 +1,7 @@ +# $FreeBSD$ + +! dummy=$( + exec 3>&1 >&2 2>&3 + ulimit -n 9 + exec 9<. +) && [ -n "$dummy" ] diff --git a/bin/sh/tests/errors/write-error1.0 b/bin/sh/tests/errors/write-error1.0 new file mode 100644 index 0000000..fcb52e7 --- /dev/null +++ b/bin/sh/tests/errors/write-error1.0 @@ -0,0 +1,3 @@ +# $FreeBSD$ + +! echo >&- 2>/dev/null |