authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2021-09-20 17:10:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-09-20 20:16:14-04:00
log2a728f6e5f0c5d12e110313342e714f9f23c4044
tree08971335e990f715eb392e35da3d9c0a0293c0cc
parent380ca2685548ac916c825842033671ac8a97f577

tokenizer: Fix index-out-of-bounds on string_literal_backslash right before EOF


1 files changed, 5 insertions(+), 1 deletions(-)

lib/std/zig/tokenizer.zig+5-1
...@@ -700,7 +700,7 @@ pub const Tokenizer = struct {...@@ -700,7 +700,7 @@ pub const Tokenizer = struct {
700 },700 },
701701
702 .string_literal_backslash => switch (c) {702 .string_literal_backslash => switch (c) {
703 '\n' => {703 0, '\n' => {
704 result.tag = .invalid;704 result.tag = .invalid;
705 break;705 break;
706 },706 },
...@@ -1919,6 +1919,10 @@ test "tokenizer - invalid builtin identifiers" {...@@ -1919,6 +1919,10 @@ test "tokenizer - invalid builtin identifiers" {
1919 try testTokenize("@0()", &.{ .invalid, .integer_literal, .l_paren, .r_paren });1919 try testTokenize("@0()", &.{ .invalid, .integer_literal, .l_paren, .r_paren });
1920}1920}
19211921
1922test "tokenizer - backslash before eof in string literal" {
1923 try testTokenize("\"\\", &.{.invalid});
1924}
1925
1922fn testTokenize(source: [:0]const u8, expected_tokens: []const Token.Tag) !void {1926fn testTokenize(source: [:0]const u8, expected_tokens: []const Token.Tag) !void {
1923 var tokenizer = Tokenizer.init(source);1927 var tokenizer = Tokenizer.init(source);
1924 for (expected_tokens) |expected_token_id| {1928 for (expected_tokens) |expected_token_id| {