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