From f2df0ec7dd0552af9a7ee4ab1bf77c302f08bd57 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 18 Apr 2018 21:26:55 -0400 Subject: [PATCH] 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 --- src/cmd/go/go_test.go | 3 +++ src/cmd/go/internal/work/action.go | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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 { -- 2.50.0