diff --git a/doc/langref/grammar.peg b/doc/langref/grammar.peg index 5d34b8a4868b52ee0c10bd8862da6a3b83de1d50..46e6859b6fa40ae3e63bc849fabe55d4cd97e02a 100644 --- a/doc/langref/grammar.peg +++ b/doc/langref/grammar.peg @@ -537,7 +537,7 @@ RBRACE <- skip '}' RBRACKET <- skip ']' RPAREN <- skip ')' SEMICOLON <- skip ';' -SLASH <- skip '/' ![=] +SLASH <- skip '/' ![=/] SLASHEQUAL <- skip '/=' TILDE <- skip '~' diff --git a/lib/std/zig/parser_fuzz.zig b/lib/std/zig/parser_fuzz.zig index 32ed24c6afc5d2537f429d1f3709f3f9f6ba3617..6086ed4d319c323c47718ea9a504c6419dae5499 100644 --- a/lib/std/zig/parser_fuzz.zig +++ b/lib/std/zig/parser_fuzz.zig @@ -25,6 +25,10 @@ test "operator whitespace" { \\} ); } +// Found using AFL++ +test "doc comment or division operator" { + try checkAgainstOracle("0=0///\n0"); +} fn checkAgainstOracle(source: [:0]const u8) !void { var fba_buf: [1 << 18]u8 = undefined; diff --git a/lib/std/zig/parser_generated_oracle.zig b/lib/std/zig/parser_generated_oracle.zig index bd7b581760b380e9ed08696a2896093c1bf8fa26..69f23ec3139b3a0da3ff06a82c2b1d910fcf47b4 100644 --- a/lib/std/zig/parser_generated_oracle.zig +++ b/lib/std/zig/parser_generated_oracle.zig @@ -3927,6 +3927,7 @@ const Parser = struct { const pos_1 = p.i; const match_1 = (p.i < p.source.len and switch (p.source[p.i]) { '='...'=', + '/'...'/', => blk_2: { p.i += 1; break :blk_2 true;