diff options
author | Denys Vlasenko | 2018-12-21 00:35:22 +0100 |
---|---|---|
committer | Denys Vlasenko | 2018-12-21 00:35:22 +0100 |
commit | 52caa007e3f32225b6cd9f899480362c4563b023 (patch) | |
tree | bb44c017ba5aafc819d5723b60ddb27728bfd1d3 | |
parent | 047154472ac41ddf45ed57d9bc294fbf9057cbad (diff) | |
download | busybox-52caa007e3f32225b6cd9f899480362c4563b023.zip busybox-52caa007e3f32225b6cd9f899480362c4563b023.tar.gz |
bc: for(;;) fix from upstream
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/bc.c | 8 | ||||
-rwxr-xr-x | testsuite/bc.tests | 5 |
2 files changed, 12 insertions, 1 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index d37417f..e7983f3 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 d33f8c9..edff209 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" \ |