From f987875222a7759e0a70530ed84e9ae6f6ad876d Mon Sep 17 00:00:00 2001 From: amaicode <81657336+amaicode@users.noreply.github.com> Date: Sat, 20 May 2023 08:35:41 -0400 Subject: [PATCH] fix: panic on BadStatement (#495) Add BadStatement case to walk.go to fix panic if there's bad code. --- ast/walk.go | 1 + ast/walk_test.go | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ast/walk.go b/ast/walk.go index 521445b..4422930 100644 --- a/ast/walk.go +++ b/ast/walk.go @@ -38,6 +38,7 @@ func Walk(v Visitor, n Node) { Walk(v, n.Right) } case *BadExpression: + case *BadStatement: case *BinaryExpression: if n != nil { Walk(v, n.Left) diff --git a/ast/walk_test.go b/ast/walk_test.go index 1748c67..d4f23e9 100644 --- a/ast/walk_test.go +++ b/ast/walk_test.go @@ -136,3 +136,22 @@ func Test_issue261(t *testing.T) { }) } } + +func TestBadStatement(t *testing.T) { + source := ` + var abc; + break; do { + } while(true); +` + program, err := parser.ParseFile(nil, "", source, 0) + require.ErrorContains(t, err, "Illegal break statement") + + w := &walker{ + source: source, + seen: make(map[ast.Node]struct{}), + } + + require.NotPanics(t, func() { + ast.Walk(w, program) + }) +}