diff options
author | jilles <jilles@FreeBSD.org> | 2014-12-29 15:11:07 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-12-29 15:11:07 +0000 |
commit | ca31dd6023ba06fea001d33fec8ad47e935df007 (patch) | |
tree | cb8d8fb328118ca35e53c98c91f9a691a751bd25 /bin/sh/tests | |
parent | 517ef2d35127d2138a5e90592861babfc9888aa5 (diff) | |
download | FreeBSD-src-ca31dd6023ba06fea001d33fec8ad47e935df007.zip FreeBSD-src-ca31dd6023ba06fea001d33fec8ad47e935df007.tar.gz |
MFC r273920: 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.
Diffstat (limited to 'bin/sh/tests')
-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 bd24319..5b52efc 100644 --- a/bin/sh/tests/expansion/Makefile +++ b/bin/sh/tests/expansion/Makefile @@ -69,6 +69,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)) |