diff options
author | Robert Griesemer <gri@golang.org> | 2018-05-17 23:56:11 -0400 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2018-05-18 16:01:32 +0000 |
commit | db37e1600fb2fc698b14e745005c4cf44251d2a9 (patch) | |
tree | 379fb5de04ddc7e35c73d7caa0915141545bf100 /src/go/parser/parser.go | |
parent | 8a16c71067ca2cfd09281a82ee150a408095f0bc (diff) | |
download | go-db37e1600fb2fc698b14e745005c4cf44251d2a9.tar.gz go-db37e1600fb2fc698b14e745005c4cf44251d2a9.zip |
go/parser: make sure we have a valid AST when 'if' condition is missing
This prevents a crash in go/types due to a nil condition in an 'if'
statement. There's more we can do to make go/types more robust but
this will address the immediate cause and also makes sure that the
parser returns a valid AST in this case.
Fixes #25438.
Change-Id: Ie55dc2c722352a5ecb17af6a16983741e8a8b515
Reviewed-on: https://go-review.googlesource.com/113735
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martà <mvdan@mvdan.cc>
Reviewed-by: Dominik Honnef <dominik@honnef.co>
Reviewed-by: Alan Donovan <adonovan@google.com>
Diffstat (limited to 'src/go/parser/parser.go')
-rw-r--r-- | src/go/parser/parser.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/go/parser/parser.go b/src/go/parser/parser.go index 7671d2a4bb..189bfb4223 100644 --- a/src/go/parser/parser.go +++ b/src/go/parser/parser.go @@ -1830,6 +1830,7 @@ func (p *parser) makeExpr(s ast.Stmt, want string) ast.Expr { func (p *parser) parseIfHeader() (init ast.Stmt, cond ast.Expr) { if p.tok == token.LBRACE { p.error(p.pos, "missing condition in if statement") + cond = &ast.BadExpr{From: p.pos, To: p.pos} return } // p.tok != token.LBRACE @@ -1877,6 +1878,11 @@ func (p *parser) parseIfHeader() (init ast.Stmt, cond ast.Expr) { } } + // make sure we have a valid AST + if cond == nil { + cond = &ast.BadExpr{From: p.pos, To: p.pos} + } + p.exprLev = outer return } |