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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to