← Commit list

94576d2b9

Denys Vlasenko
Denys Vlasenko
2018-12-25
SUCCESS Duration: 151s

Subject

bc: fix interactive handling of comments in strings and quotes in comments

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

miscutils/bc.c+20 -16
@@ -2910,25 +2910,29 @@ static bool bc_lex_more_input(void)
string = G.input_buffer.v + prevlen;
while (*string) {
char c = *string;
- if (string == G.input_buffer.v || string[-1] != '\\') {
- if (IS_BC)
- str ^= (c == '"');
- else {
- if (c == ']')
- str -= 1;
- else if (c == '[')
- str += 1;
+ if (!comment) {
+ if (string == G.input_buffer.v || string[-1] != '\\') {
+ if (IS_BC)
+ str ^= (c == '"');
+ else {
+ if (c == ']')
+ str -= 1;
+ else if (c == '[')
+ str += 1;
+ }
}
}
string++;
- if (c == '/' && *string == '*') {
- comment = true;
- string++;
- continue;
- }
- if (c == '*' && *string == '/') {
- comment = false;
- string++;
+ if (!str) {
+ if (c == '/' && *string == '*') {
+ comment = true;
+ string++;
+ continue;
+ }
+ if (c == '*' && *string == '/') {
+ comment = false;
+ string++;
+ }
}
}
if (str != 0 || comment) {
testsuite/bc.tests+14 -2
@@ -6,16 +6,28 @@
# testing "test name" "command" "expected result" "file input" "stdin"
-testing "bc comment 1" \
+testing "bc comment" \
"bc" \
"3\n" \
"" "1 /* comment */ + 2"
-testing "bc comment 2: /*/ is not a closed comment" \
+testing "bc /*/ is not a closed comment" \
"bc" \
"4\n" \
"" "1 /*/ + 2 */ + 3"
+# this needs interactive testing
+testing "bc comment with \"" \
+ "bc" \
+ "3\n" \
+ "" "1 /* \" */ + 2"
+
+# this needs interactive testing
+testing "bc \"string/*\" is not a comment" \
+ "bc" \
+ "string/*9\n" \
+ "" "\"string/*\";9"
+
testing "bc comment 3: unterminated #comment" \
"bc" \
"" \