summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2010-03-13 22:30:52 +0000
committerjilles <jilles@FreeBSD.org>2010-03-13 22:30:52 +0000
commit3b24e7eb73016214a72d46429d6871d117b82325 (patch)
tree5317282c135ee8e425446b3ac2d8c70f7af9ca27
parentb5dfb72f0377d3bffc1638b69b8b4298cca90a74 (diff)
downloadFreeBSD-src-3b24e7eb73016214a72d46429d6871d117b82325.zip
FreeBSD-src-3b24e7eb73016214a72d46429d6871d117b82325.tar.gz
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 :'.
-rw-r--r--tools/regression/bin/sh/errors/assignment-error1.030
1 files changed, 30 insertions, 0 deletions
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 0000000..9e42f2b
--- /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
OpenPOWER on IntegriCloud