From: Russ Cox Date: Thu, 19 Apr 2018 01:26:55 +0000 (-0400) Subject: cmd/go: avoid infinite loop in go list -json -e on import cycle X-Git-Tag: go1.11beta1~686 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f2df0ec7dd0552af9a7ee4ab1bf77c302f08bd57;p=gostls13.git cmd/go: avoid infinite loop in go list -json -e on import cycle Don't chase import cycles forever preparing list JSON. Fixes #24086. Change-Id: Ia1139d0c8d813d068c367a8baee59d240a545617 Reviewed-on: https://go-review.googlesource.com/108016 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index add30867db..b724460a86 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -1373,6 +1373,9 @@ func TestImportCycle(t *testing.T) { if count > 1 { t.Fatal("go build mentioned import cycle more than once") } + + // Don't hang forever. + tg.run("list", "-e", "-json", "selfimport") } // cmd/go: custom import path checking should not apply to Go packages without import comment. diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go index 21744de9a3..8b53fad19a 100644 --- a/src/cmd/go/internal/work/action.go +++ b/src/cmd/go/internal/work/action.go @@ -339,8 +339,10 @@ func (b *Builder) CompileAction(mode, depMode BuildMode, p *load.Package) *Actio Objdir: b.NewObjdir(), } - for _, p1 := range p.Internal.Imports { - a.Deps = append(a.Deps, b.CompileAction(depMode, depMode, p1)) + if p.Error == nil || !p.Error.IsImportCycle { + for _, p1 := range p.Internal.Imports { + a.Deps = append(a.Deps, b.CompileAction(depMode, depMode, p1)) + } } if p.Standard {