diff options
author | jilles <jilles@FreeBSD.org> | 2014-10-31 22:28:10 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-10-31 22:28:10 +0000 |
commit | a2ae3a60f9dcb97e007d43119443b80cb85a8f84 (patch) | |
tree | 23eaaab2f0d08d92dfb181fe9c78341f0590a848 /bin/sh/tests/expansion | |
parent | 41b6a835472de042268a29723b3c9291dfb7e24d (diff) | |
download | FreeBSD-src-a2ae3a60f9dcb97e007d43119443b80cb85a8f84.zip FreeBSD-src-a2ae3a60f9dcb97e007d43119443b80cb85a8f84.tar.gz |
sh: Fix corruption of CTL* bytes in positional parameters in redirection.
EXP_REDIR was not being checked for while expanding positional parameters in
redirection, so CTL* bytes were not being prefixed where they should be.
MFC after: 1 week
Diffstat (limited to 'bin/sh/tests/expansion')
-rw-r--r-- | bin/sh/tests/expansion/Makefile | 1 | ||||
-rw-r--r-- | bin/sh/tests/expansion/redir1.0 | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/bin/sh/tests/expansion/Makefile b/bin/sh/tests/expansion/Makefile index 36b5fa5..027bc95 100644 --- a/bin/sh/tests/expansion/Makefile +++ b/bin/sh/tests/expansion/Makefile @@ -72,6 +72,7 @@ FILES+= plus-minus7.0 FILES+= plus-minus8.0 FILES+= question1.0 FILES+= readonly1.0 +FILES+= redir1.0 FILES+= set-u1.0 FILES+= set-u2.0 FILES+= set-u3.0 diff --git a/bin/sh/tests/expansion/redir1.0 b/bin/sh/tests/expansion/redir1.0 new file mode 100644 index 0000000..aa13e15 --- /dev/null +++ b/bin/sh/tests/expansion/redir1.0 @@ -0,0 +1,26 @@ +# $FreeBSD$ + +bad=0 +for i in 0 1 2 3; do + for j in 0 1 2 3 4 5 6 7; do + for k in 0 1 2 3 4 5 6 7; do + case $i$j$k in + 000) continue ;; + esac + set -- "$(printf \\$i$j$k@)" + set -- "${1%@}" + ff= + for f in /dev/null /dev/zero /; do + if [ -e "$f" ] && [ ! -e "$f$1" ]; then + ff=$f + fi + done + [ -n "$ff" ] || continue + if { true <$ff$1; } 2>/dev/null; then + echo "Bad: $i$j$k ($ff)" >&2 + : $((bad += 1)) + fi + done + done +done +exit $((bad ? 2 : 0)) |