From 45249f152b5ef4555eedd0c7ed52f2364b200064 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 13 Mar 2010 22:30:52 +0000 Subject: [PATCH] sh: Add test for assignment errors (e.g. trying to change a readonly var). We currently ignore readonly status for assignments before regular builtins and external programs (these assignments are not persistent anyway), so just check that the readonly variable really is not changed. The test depends on the command builtin changes for 'command :'. --- .../bin/sh/errors/assignment-error1.0 | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tools/regression/bin/sh/errors/assignment-error1.0 diff --git a/tools/regression/bin/sh/errors/assignment-error1.0 b/tools/regression/bin/sh/errors/assignment-error1.0 new file mode 100644 index 00000000000..9e42f2be5fe --- /dev/null +++ b/tools/regression/bin/sh/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