svn commit: r268927 - in head/bin/sh: . tests/builtins

Jilles Tjoelker jilles at FreeBSD.org
Sun Jul 20 20:29:11 UTC 2014


Author: jilles
Date: Sun Jul 20 20:29:09 2014
New Revision: 268927
URL: http://svnweb.freebsd.org/changeset/base/268927

Log:
  sh: Allow arbitrarily large numbers in break and continue.
  
  The argument is capped to loopnest, so strtol()'s [ERANGE] can be ignored.

Added:
  head/bin/sh/tests/builtins/break6.0   (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 Jul 20 20:14:15 2014	(r268926)
+++ head/bin/sh/eval.c	Sun Jul 20 20:29:09 2014	(r268927)
@@ -1250,8 +1250,16 @@ bltincmd(int argc, char **argv)
 int
 breakcmd(int argc, char **argv)
 {
-	int n = argc > 1 ? number(argv[1]) : 1;
+	long n;
+	char *end;
 
+	if (argc > 1) {
+		/* Allow arbitrarily large numbers. */
+		n = strtol(argv[1], &end, 10);
+		if (!is_digit(argv[1][0]) || *end != '\0')
+			error("Illegal number: %s", argv[1]);
+	} else
+		n = 1;
 	if (n > loopnest)
 		n = loopnest;
 	if (n > 0) {

Modified: head/bin/sh/tests/builtins/Makefile
==============================================================================
--- head/bin/sh/tests/builtins/Makefile	Sun Jul 20 20:14:15 2014	(r268926)
+++ head/bin/sh/tests/builtins/Makefile	Sun Jul 20 20:29:09 2014	(r268927)
@@ -14,6 +14,7 @@ FILES+=		break2.0 break2.0.stdout
 FILES+=		break3.0
 FILES+=		break4.4
 FILES+=		break5.4
+FILES+=		break6.0
 FILES+=		builtin1.0
 FILES+=		case1.0
 FILES+=		case2.0

Added: head/bin/sh/tests/builtins/break6.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/bin/sh/tests/builtins/break6.0	Sun Jul 20 20:29:09 2014	(r268927)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+# Per POSIX, this need only work if LONG_MAX > 4294967295.
+
+while :; do
+	break 4294967296
+	echo bad
+	exit 3
+done


More information about the svn-src-all mailing list