diff options
author | Robert Griesemer <gri@golang.org> | 2020-12-14 17:23:00 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2020-12-15 19:44:38 +0000 |
commit | 6b18081d01f6f87b9af9e5b3910f1379d52a13eb (patch) | |
tree | 4d660d75989a3692c8e9d925ac3d5c4f4f470d6b /src/cmd/compile/internal/syntax/parser.go | |
parent | 14e4267c3446fe30bb1c7a1a874dc7e18c1d38d1 (diff) | |
download | go-6b18081d01f6f87b9af9e5b3910f1379d52a13eb.tar.gz go-6b18081d01f6f87b9af9e5b3910f1379d52a13eb.zip |
[dev.typeparams] cmd/compile/internal/types2: don't crash if import path is missing
In package syntax:
- fix parser appendGroup to not add nil entries
- non-string paths are syntax errors per the spec; report in parser
- document ImportDecl.Path invariants
In package types2:
- guard against absent paths
In package gc:
- guard against absent paths
Fixes #43190.
Change-Id: Ic6a06f6a96b7f519feaa1ceaf4376fc5ab0f0129
Reviewed-on: https://go-review.googlesource.com/c/go/+/278114
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax/parser.go')
-rw-r--r-- | src/cmd/compile/internal/syntax/parser.go | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 4af7e462ed..90b67def0f 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -499,21 +499,16 @@ func (p *parser) appendGroup(list []Decl, f func(*Group) Decl) []Decl { p.clearPragma() p.next() // must consume "(" after calling clearPragma! p.list(_Semi, _Rparen, func() bool { - list = append(list, f(g)) + if x := f(g); x != nil { + list = append(list, x) + } return false }) } else { - list = append(list, f(nil)) - } - - if debug { - for _, d := range list { - if d == nil { - panic("nil list entry") - } + if x := f(nil); x != nil { + list = append(list, x) } } - return list } @@ -540,8 +535,13 @@ func (p *parser) importDecl(group *Group) Decl { if d.Path == nil { p.syntaxError("missing import path") p.advance(_Semi, _Rparen) - return nil + return d + } + if !d.Path.Bad && d.Path.Kind != StringLit { + p.syntaxError("import path must be a string") + d.Path.Bad = true } + // d.Path.Bad || d.Path.Kind == StringLit return d } |