aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-05-25 18:13:10 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-05-25 18:13:10 -0700
commit44de8849803fd41b5e298926dcb835fcf3d31071 (patch)
tree2a3d4780ae16119c35ff02c9b3c635fb8c3683d9 /lib/std
parent3ed6379192ceffdc1b85cd83c16e87cd477e2043 (diff)
downloadzig-44de8849803fd41b5e298926dcb835fcf3d31071.tar.gz
zig-44de8849803fd41b5e298926dcb835fcf3d31071.zip
tokenizer: fix crash on multiline string with only 1 backslash
Closes #8904
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/zig/tokenizer.zig11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/std/zig/tokenizer.zig b/lib/std/zig/tokenizer.zig
index edb6b5ffc3..241d7b7e20 100644
--- a/lib/std/zig/tokenizer.zig
+++ b/lib/std/zig/tokenizer.zig
@@ -698,7 +698,10 @@ pub const Tokenizer = struct {
'\\' => {
state = .multiline_string_literal_line;
},
- else => break,
+ else => {
+ result.tag = .invalid;
+ break;
+ },
},
.string_literal => switch (c) {
'\\' => {
@@ -1960,7 +1963,7 @@ test "tokenizer - number literals octal" {
try testTokenize("0o_,", &.{ .invalid, .identifier, .comma });
}
-test "tokenizer - number literals hexadeciaml" {
+test "tokenizer - number literals hexadecimal" {
try testTokenize("0x0", &.{.integer_literal});
try testTokenize("0x1", &.{.integer_literal});
try testTokenize("0x2", &.{.integer_literal});
@@ -2046,6 +2049,10 @@ test "tokenizer - number literals hexadeciaml" {
try testTokenize("0x0.0p0_", &.{ .invalid, .eof });
}
+test "tokenizer - multi line string literal with only 1 backslash" {
+ try testTokenize("x \\\n;", &.{ .identifier, .invalid, .semicolon });
+}
+
fn testTokenize(source: []const u8, expected_tokens: []const Token.Tag) !void {
var tokenizer = Tokenizer.init(source);
for (expected_tokens) |expected_token_id| {