Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Aug 2013 10:57:49 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r254843 - in head: bin/sh tools/regression/bin/sh/parser
Message-ID:  <201308251057.r7PAvnNp019148@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sun Aug 25 10:57:48 2013
New Revision: 254843
URL: http://svnweb.freebsd.org/changeset/base/254843

Log:
  sh: Disallow empty simple commands.
  
  As per POSIX, a simple command must have at least one redirection,
  assignment word or command word.
  
  These occured in rare cases such as  eval "f()" .
  
  The extension of allowing no commands inside { }, if, while, for, etc.
  remains.

Added:
  head/tools/regression/bin/sh/parser/empty-cmd1.0   (contents, props changed)
Modified:
  head/bin/sh/parser.c

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c	Sun Aug 25 10:57:09 2013	(r254842)
+++ head/bin/sh/parser.c	Sun Aug 25 10:57:48 2013	(r254843)
@@ -573,7 +573,7 @@ TRACE(("expecting DO got %s %s\n", tokna
 			synexpect(TEND);
 		checkkwd = CHKKWD | CHKALIAS;
 		break;
-	/* Handle an empty command like other simple commands.  */
+	/* A simple command must have at least one redirection or word. */
 	case TBACKGND:
 	case TSEMI:
 	case TAND:
@@ -581,16 +581,12 @@ TRACE(("expecting DO got %s %s\n", tokna
 	case TPIPE:
 	case TENDCASE:
 	case TFALLTHRU:
-		/*
-		 * An empty command before a ; doesn't make much sense, and
-		 * should certainly be disallowed in the case of `if ;'.
-		 */
+	case TEOF:
+	case TNL:
+	case TRP:
 		if (!redir)
 			synexpect(-1);
-	case TNL:
-	case TEOF:
 	case TWORD:
-	case TRP:
 		tokpushback++;
 		n1 = simplecmd(rpp, redir);
 		return n1;

Added: head/tools/regression/bin/sh/parser/empty-cmd1.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/parser/empty-cmd1.0	Sun Aug 25 10:57:48 2013	(r254843)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+! (eval ': || f()') 2>/dev/null



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