[git commit] bc: fix another thinko

Denys Vlasenko vda.linux at googlemail.com
Thu Dec 13 16:56:35 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=818b602c8859cd935083e183eb772becc26acfb3
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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

diff --git a/miscutils/bc.c b/miscutils/bc.c
index a78cd591a..74847a328 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -7059,22 +7059,21 @@ static BC_STATUS zbc_vm_stdin(void)
 	str = 0;
 	for (;;) {
 		size_t len;
-		char *string;
 
 		bc_read_line(&buf);
 		len = buf.len - 1;
 		if (len == 0) // "" buf means EOF
 			break;
-		string = buf.v;
 		if (len == 1) {
 			if (str && buf.v[0] == G.send)
 				str -= 1;
 			else if (buf.v[0] == G.sbgn)
 				str += 1;
 		} else {
+			char *string = buf.v;
 			while (*string) {
 				char c = *string;
-				if (string != buf.v && string[-1] != '\\') {
+				if (string == buf.v || string[-1] != '\\') {
 					// checking applet type is cheaper than accessing sbgn/send
 					if (IS_BC) // bc: sbgn = send = '"'
 						str ^= (c == '"');
diff --git a/testsuite/bc.tests b/testsuite/bc.tests
index 4f0d50f73..5e8c47c0f 100755
--- a/testsuite/bc.tests
+++ b/testsuite/bc.tests
@@ -16,6 +16,16 @@ testing "bc comment 2: /*/ is not a closed comment" \
 	"4\n" \
 	"" "1 /*/ + 2 */ + 3"
 
+testing "bc backslash 1" \
+	"bc" \
+	"3\n" \
+	"" "1 \\\\\n + 2"
+
+testing "bc string 1" \
+	"bc" \
+	"STR\n" \
+	"" "\"STR\n\""
+
 tar xJf bc_large.tar.xz
 
 for f in bc*.bc; do


More information about the busybox-cvs mailing list