diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-05-25 18:13:10 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-05-25 18:13:10 -0700 |
| commit | 44de8849803fd41b5e298926dcb835fcf3d31071 (patch) | |
| tree | 2a3d4780ae16119c35ff02c9b3c635fb8c3683d9 /lib/std | |
| parent | 3ed6379192ceffdc1b85cd83c16e87cd477e2043 (diff) | |
| download | zig-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.zig | 11 |
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| { |
