svn commit: r320510 - in stable/10/bin/sh: . tests/expansion

Jilles Tjoelker jilles at FreeBSD.org
Fri Jun 30 21:32:50 UTC 2017


Author: jilles
Date: Fri Jun 30 21:32:48 2017
New Revision: 320510
URL: https://svnweb.freebsd.org/changeset/base/320510

Log:
  MFC r315005: sh: Fix executing wrong command with ${x#$(y)}$(z).
  
  The parsed internal representation of words consists of a byte string with a
  list of nodes (commands in command substitution). Each unescaped CTLBACKQ or
  CTLBACKQ | CTLQUOTE byte corresponds to an entry in the list.
  
  If param in ${param#%##%%word} is not set, the word is not expanded (in a
  deviation of POSIX shared with other ash variants and ksh93). Erroneously,
  the pointer in the list of commands (argbackq) was not advanced. This caused
  the wrong command to be executed later if the outer word contained another
  command substitution.
  
  Example:
    echo "${unsetvar#$(echo a)}$(echo b)"
  wrote "a" but should write "b".

Added:
  stable/10/bin/sh/tests/expansion/cmdsubst23.0
     - copied unchanged from r315005, head/bin/sh/tests/expansion/cmdsubst23.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	Fri Jun 30 20:27:51 2017	(r320509)
+++ stable/10/bin/sh/expand.c	Fri Jun 30 21:32:48 2017	(r320510)
@@ -740,8 +740,10 @@ again: /* jump here after setting a variable with ${va
 	case VSTRIMLEFTMAX:
 	case VSTRIMRIGHT:
 	case VSTRIMRIGHTMAX:
-		if (!set)
+		if (!set) {
+			set = 1;
 			break;
+		}
 		/*
 		 * Terminate the string and start recording the pattern
 		 * right after it

Modified: stable/10/bin/sh/tests/expansion/Makefile
==============================================================================
--- stable/10/bin/sh/tests/expansion/Makefile	Fri Jun 30 20:27:51 2017	(r320509)
+++ stable/10/bin/sh/tests/expansion/Makefile	Fri Jun 30 21:32:48 2017	(r320510)
@@ -43,6 +43,7 @@ FILES+=		cmdsubst19.0
 FILES+=		cmdsubst20.0
 FILES+=		cmdsubst21.0
 FILES+=		cmdsubst22.0
+FILES+=		cmdsubst23.0
 FILES+=		export1.0
 FILES+=		export2.0
 FILES+=		export3.0

Copied: stable/10/bin/sh/tests/expansion/cmdsubst23.0 (from r315005, head/bin/sh/tests/expansion/cmdsubst23.0)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/bin/sh/tests/expansion/cmdsubst23.0	Fri Jun 30 21:32:48 2017	(r320510, copy of r315005, head/bin/sh/tests/expansion/cmdsubst23.0)
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+unset n
+x=abcd
+[ "X${n#$(echo a)}X${x#$(echo ab)}X$(echo abc)X" = XXcdXabcX ]


More information about the svn-src-all mailing list