Author: jilles
Date: Sun May 20 17:25:52 2018
New Revision: 333927
URL: https://svnweb.freebsd.org/changeset/base/333927

Log:
  sh: Allow unquoted newlines in word in ${param+word} etc.
  
  POSIX requires accepting unquoted newlines in word in parameter expansions
  like ${param+word}, ${param#word}, although the Bourne shell did not support
  it, it is not commonly used and might make it harder to find a missing
  closing brace.
  
  It was also strange that something like
  
  foo="${bar#
  }"
  
  was rejected.
  
  Reported by:  Martijn Dekker via Robert Elz

Added:
  head/bin/sh/tests/expansion/plus-minus9.0   (contents, props changed)
  head/bin/sh/tests/expansion/trim10.0   (contents, props changed)
  head/bin/sh/tests/expansion/trim11.0   (contents, props changed)
Modified:
  head/bin/sh/parser.c
  head/bin/sh/tests/expansion/Makefile

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c        Sun May 20 16:03:21 2018        (r333926)
+++ head/bin/sh/parser.c        Sun May 20 17:25:52 2018        (r333927)
@@ -1434,7 +1434,8 @@ readtoken1(int firstc, char const *initialsyntax, cons
 
                        switch(synentry) {
                        case CNL:       /* '\n' */
-                               if (state[level].syntax == BASESYNTAX)
+                               if (level == 0 &&
+                                   state[level].syntax == BASESYNTAX)
                                        goto endword;   /* exit outer loop */
                                USTPUTC(c, out);
                                plinno++;

Modified: head/bin/sh/tests/expansion/Makefile
==============================================================================
--- head/bin/sh/tests/expansion/Makefile        Sun May 20 16:03:21 2018        
(r333926)
+++ head/bin/sh/tests/expansion/Makefile        Sun May 20 17:25:52 2018        
(r333927)
@@ -84,6 +84,7 @@ ${PACKAGE}FILES+=     plus-minus5.0
 ${PACKAGE}FILES+=      plus-minus6.0
 ${PACKAGE}FILES+=      plus-minus7.0
 ${PACKAGE}FILES+=      plus-minus8.0
+${PACKAGE}FILES+=      plus-minus9.0
 ${PACKAGE}FILES+=      question1.0
 ${PACKAGE}FILES+=      readonly1.0
 ${PACKAGE}FILES+=      redir1.0
@@ -101,5 +102,7 @@ ${PACKAGE}FILES+=   trim6.0
 ${PACKAGE}FILES+=      trim7.0
 ${PACKAGE}FILES+=      trim8.0
 ${PACKAGE}FILES+=      trim9.0
+${PACKAGE}FILES+=      trim10.0
+${PACKAGE}FILES+=      trim11.0
 
 .include <bsd.test.mk>

Added: head/bin/sh/tests/expansion/plus-minus9.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/bin/sh/tests/expansion/plus-minus9.0   Sun May 20 17:25:52 2018        
(r333927)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+a=1
+b=${a+
+}
+n='
+'
+[ "$b" = "$n" ]

Added: head/bin/sh/tests/expansion/trim10.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/bin/sh/tests/expansion/trim10.0        Sun May 20 17:25:52 2018        
(r333927)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+a='z
+'
+b=${a%
+}
+[ "$b" = z ]

Added: head/bin/sh/tests/expansion/trim11.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/bin/sh/tests/expansion/trim11.0        Sun May 20 17:25:52 2018        
(r333927)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+a='z
+'
+b="${a%
+}"
+[ "$b" = z ]
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to