svn commit: r254843 - in head: bin/sh tools/regression/bin/sh/parser
Jilles Tjoelker
jilles at FreeBSD.org
Sun Aug 25 10:57:49 UTC 2013
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
More information about the svn-src-head
mailing list