Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Dec 2014 15:11:08 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r276363 - in stable/10/bin/sh: . tests/expansion
Message-ID:  <201412291511.sBTFB83f087156@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Mon Dec 29 15:11:07 2014
New Revision: 276363
URL: https://svnweb.freebsd.org/changeset/base/276363

Log:
  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.

Added:
  stable/10/bin/sh/tests/expansion/redir1.0
     - copied unchanged from r273920, head/bin/sh/tests/expansion/redir1.0
Modified:
  stable/10/bin/sh/expand.c
  stable/10/bin/sh/tests/expansion/Makefile
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/bin/sh/expand.c
==============================================================================
--- stable/10/bin/sh/expand.c	Mon Dec 29 14:52:32 2014	(r276362)
+++ stable/10/bin/sh/expand.c	Mon Dec 29 15:11:07 2014	(r276363)
@@ -867,7 +867,7 @@ varisset(const char *name, int nulok)
 static void
 strtodest(const char *p, int flag, int subtype, int quoted)
 {
-	if (flag & (EXP_FULL | EXP_CASE) && subtype != VSLENGTH)
+	if (flag & (EXP_FULL | EXP_CASE | EXP_REDIR) && subtype != VSLENGTH)
 		STPUTS_QUOTES(p, quoted ? DQSYNTAX : BASESYNTAX, expdest);
 	else
 		STPUTS(p, expdest);

Modified: stable/10/bin/sh/tests/expansion/Makefile
==============================================================================
--- stable/10/bin/sh/tests/expansion/Makefile	Mon Dec 29 14:52:32 2014	(r276362)
+++ stable/10/bin/sh/tests/expansion/Makefile	Mon Dec 29 15:11:07 2014	(r276363)
@@ -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

Copied: stable/10/bin/sh/tests/expansion/redir1.0 (from r273920, head/bin/sh/tests/expansion/redir1.0)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/bin/sh/tests/expansion/redir1.0	Mon Dec 29 15:11:07 2014	(r276363, copy of r273920, head/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))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412291511.sBTFB83f087156>