Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 Jul 2014 20:29:10 +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: r268927 - in head/bin/sh: . tests/builtins
Message-ID:  <201407202029.s6KKTA2N055030@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



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