[git commit] bc: for(;;) fix from upstream

Denys Vlasenko vda.linux at googlemail.com
Thu Dec 20 23:35:22 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=52caa007e3f32225b6cd9f899480362c4563b023
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/bc.c     | 8 +++++++-
 testsuite/bc.tests | 5 +++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index d37417f11..e7983f38d 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -4205,8 +4205,14 @@ static BC_STATUS zbc_parse_for(BcParse *p)
 
 	if (p->l.t.t != BC_LEX_SCOLON)
 		s = zbc_parse_expr(p, BC_PARSE_REL);
-	else
+	else {
+		// Set this for the next call to bc_parse_number.
+		// This is safe to set because the current token is a semicolon,
+		// which has no string requirement.
+		bc_vec_string(&p->l.t.v, 1, "1");
+		bc_parse_pushNUM(p);
 		s = bc_POSIX_does_not_allow_empty_X_expression_in_for("condition");
+	}
 
 	if (s) RETURN_STATUS(s);
 	if (p->l.t.t != BC_LEX_SCOLON) RETURN_STATUS(bc_error_bad_token());
diff --git a/testsuite/bc.tests b/testsuite/bc.tests
index d33f8c90a..edff209bb 100755
--- a/testsuite/bc.tests
+++ b/testsuite/bc.tests
@@ -51,6 +51,11 @@ testing "bc if 0 else if 1" \
 	"2\n9\n" \
 	"" "if (0) 1 else if (1) 2; 9"
 
+testing "bc for(;;)" \
+	"bc" \
+	"2\n3\n2\n9\n" \
+	"" "i=2; for (;;) { 2; if(--i==0) break; 3; }; 9"
+
 testing "bc define auto" \
 	"bc" \
 	"8\n9\n" \


More information about the busybox-cvs mailing list