From 22501a76a1647f341697bfe27ce6e8475d42cb0d Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Wed, 30 Dec 2015 10:37:15 -0500 Subject: [PATCH] oracle: describe: fix crash on bad ImportSpec + Test Fixes issue #13380 Change-Id: I6d738756017f83a296bde6a04845cd985a351409 Reviewed-on: https://go-review.googlesource.com/18210 Reviewed-by: Michael Matloob --- oracle/describe.go | 12 ++++++++---- oracle/testdata/src/describe/main.go | 8 ++++++++ oracle/testdata/src/describe/main.golden | 6 ++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/oracle/describe.go b/oracle/describe.go index db53696e..29646b9a 100644 --- a/oracle/describe.go +++ b/oracle/describe.go @@ -513,11 +513,15 @@ func describePackage(qpos *queryPos, path []ast.Node) (*describePackageResult, e var pkg *types.Package switch n := path[0].(type) { case *ast.ImportSpec: - var pkgname *types.PkgName + var obj types.Object if n.Name != nil { - pkgname = qpos.info.Defs[n.Name].(*types.PkgName) - } else if p := qpos.info.Implicits[n]; p != nil { - pkgname = p.(*types.PkgName) + obj = qpos.info.Defs[n.Name] + } else { + obj = qpos.info.Implicits[n] + } + pkgname, _ := obj.(*types.PkgName) + if pkgname == nil { + return nil, fmt.Errorf("can't import package %s", n.Path.Value) } pkg = pkgname.Imported() description = fmt.Sprintf("import of package %q", pkg.Path()) diff --git a/oracle/testdata/src/describe/main.go b/oracle/testdata/src/describe/main.go index 69e0a754..1cdcd3cd 100644 --- a/oracle/testdata/src/describe/main.go +++ b/oracle/testdata/src/describe/main.go @@ -6,6 +6,14 @@ package describe // @describe pkgdecl "describe" // TODO(adonovan): more coverage of the (extensive) logic. +import ( + "nosuchpkg" // @describe badimport1 "nosuchpkg" + nosuchpkg2 "nosuchpkg" // @describe badimport2 "nosuchpkg2" +) + +var _ nosuchpkg.T +var _ nosuchpkg2.T + type cake float64 // @describe type-ref-builtin "float64" const c = iota // @describe const-ref-iota "iota" diff --git a/oracle/testdata/src/describe/main.golden b/oracle/testdata/src/describe/main.golden index 33d751ae..fb880a55 100644 --- a/oracle/testdata/src/describe/main.golden +++ b/oracle/testdata/src/describe/main.golden @@ -13,6 +13,12 @@ definition of package "describe" const pi untyped float = 3141/1000 const pie cake = 1768225803696341/562949953421312 +-------- @describe badimport1 -------- + +Error: can't import package "nosuchpkg" +-------- @describe badimport2 -------- + +Error: can't import package "nosuchpkg" -------- @describe type-ref-builtin -------- reference to built-in type float64