]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: avoid infinite loop in go list -json -e on import cycle
authorRuss Cox <rsc@golang.org>
Thu, 19 Apr 2018 01:26:55 +0000 (21:26 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 25 Apr 2018 17:08:07 +0000 (17:08 +0000)
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 <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/go_test.go
src/cmd/go/internal/work/action.go

index add30867db3e2b622e7125e7056a54821c13c955..b724460a8696039f34dda453c2ce8edf18f4a04a 100644 (file)
@@ -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.
index 21744de9a3b69add569a3f2ac74da6baa59fd794..8b53fad19abdd3945861dffec0feae55e5fcd345 100644 (file)
@@ -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 {