Author: jilles
Date: Sun Oct 12 13:12:06 2014
New Revision: 272983
URL: https://svnweb.freebsd.org/changeset/base/272983

Log:
  sh: Fix break/continue/return in multiline eval.
  
  Example:
    eval $'return\necho bad'

Added:
  head/bin/sh/tests/builtins/eval7.0   (contents, props changed)
  head/bin/sh/tests/builtins/eval8.7   (contents, props changed)
Modified:
  head/bin/sh/eval.c
  head/bin/sh/tests/builtins/Makefile

Modified: head/bin/sh/eval.c
==============================================================================
--- head/bin/sh/eval.c  Sun Oct 12 11:22:25 2014        (r272982)
+++ head/bin/sh/eval.c  Sun Oct 12 13:12:06 2014        (r272983)
@@ -168,6 +168,8 @@ evalstring(char *s, int flags)
                        else
                                evaltree(n, flags);
                        any = 1;
+                       if (evalskip)
+                               break;
                }
                popstackmark(&smark);
                setstackmark(&smark);

Modified: head/bin/sh/tests/builtins/Makefile
==============================================================================
--- head/bin/sh/tests/builtins/Makefile Sun Oct 12 11:22:25 2014        
(r272982)
+++ head/bin/sh/tests/builtins/Makefile Sun Oct 12 13:12:06 2014        
(r272983)
@@ -72,6 +72,8 @@ FILES+=               eval3.0
 FILES+=                eval4.0
 FILES+=                eval5.0
 FILES+=                eval6.0
+FILES+=                eval7.0
+FILES+=                eval8.7
 FILES+=                exec1.0
 FILES+=                exec2.0
 FILES+=                exit1.0

Added: head/bin/sh/tests/builtins/eval7.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/bin/sh/tests/builtins/eval7.0  Sun Oct 12 13:12:06 2014        
(r272983)
@@ -0,0 +1,9 @@
+# $FreeBSD$
+# Assumes that break can break out of a loop outside eval.
+
+while :; do
+       eval "break
+echo bad1"
+       echo bad2
+       exit 3
+done

Added: head/bin/sh/tests/builtins/eval8.7
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/bin/sh/tests/builtins/eval8.7  Sun Oct 12 13:12:06 2014        
(r272983)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+f() {
+       eval "return 7
+echo bad2"
+}
+f
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to