aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Denys Vlasenko <vda.linux@googlemail.com>2018-12-13 17:56:35 +0100
committerGravatar Denys Vlasenko <vda.linux@googlemail.com>2018-12-13 17:56:35 +0100
commit818b602c8859cd935083e183eb772becc26acfb3 (patch)
treedfaa6ac37201469f3f1685e3a5e9fe9953eeb7c0
parent335b4efd2f5627b52290e0a6320bab4e6b3aa568 (diff)
downloadbusybox-818b602c8859cd935083e183eb772becc26acfb3.tar.gz
busybox-818b602c8859cd935083e183eb772becc26acfb3.tar.bz2
bc: fix another thinko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/bc.c5
-rwxr-xr-xtestsuite/bc.tests10
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