Skip to content

Commit 7b455ee

Browse files
committed
internal/vulncheck: load source code for scan symbol mode only
For package and module scan mode, loading code is not needed and it just takes longer. With this CL, the loading for these mode drops down by ~40%. Change-Id: Ibdaa98c50e3e90ba1696d8b9706589ff4c279e17 Reviewed-on: https://go-review.googlesource.com/c/vuln/+/585335 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ian Cottrell <iancottrell@google.com> Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
1 parent 7ed0faa commit 7b455ee

File tree

6 files changed

+23
-18
lines changed

6 files changed

+23
-18
lines changed

internal/scan/source.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func runSource(ctx context.Context, handler govulncheck.Handler, cfg *config, cl
3535
Tests: cfg.test,
3636
Env: cfg.env,
3737
}
38-
if err := graph.LoadPackagesAndMods(pkgConfig, cfg.tags, cfg.patterns); err != nil {
38+
if err := graph.LoadPackagesAndMods(pkgConfig, cfg.tags, cfg.patterns, cfg.ScanLevel == govulncheck.ScanLevelSymbol); err != nil {
3939
if isGoVersionMismatchError(err) {
4040
return fmt.Errorf("%v\n\n%v", errGoVersionMismatch, err)
4141
}

internal/vulncheck/packages.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -194,18 +194,12 @@ func (g *PackageGraph) GetPackage(path string) *packages.Package {
194194

195195
// LoadPackages loads the packages specified by the patterns into the graph.
196196
// See golang.org/x/tools/go/packages.Load for details of how it works.
197-
func (g *PackageGraph) LoadPackagesAndMods(cfg *packages.Config, tags []string, patterns []string) error {
197+
func (g *PackageGraph) LoadPackagesAndMods(cfg *packages.Config, tags []string, patterns []string, wantSymbols bool) error {
198198
if len(tags) > 0 {
199199
cfg.BuildFlags = []string{fmt.Sprintf("-tags=%s", strings.Join(tags, ","))}
200200
}
201-
cfg.Mode |=
202-
packages.NeedDeps |
203-
packages.NeedImports |
204-
packages.NeedModule |
205-
packages.NeedSyntax |
206-
packages.NeedTypes |
207-
packages.NeedTypesInfo |
208-
packages.NeedName
201+
202+
addLoadMode(cfg, wantSymbols)
209203

210204
pkgs, err := packages.Load(cfg, patterns...)
211205
if err != nil {
@@ -230,6 +224,17 @@ func (g *PackageGraph) LoadPackagesAndMods(cfg *packages.Config, tags []string,
230224
return err
231225
}
232226

227+
func addLoadMode(cfg *packages.Config, wantSymbols bool) {
228+
cfg.Mode |=
229+
packages.NeedModule |
230+
packages.NeedName |
231+
packages.NeedDeps |
232+
packages.NeedImports
233+
if wantSymbols {
234+
cfg.Mode |= packages.NeedSyntax | packages.NeedTypes | packages.NeedTypesInfo
235+
}
236+
}
237+
233238
// packageError contains errors from loading a set of packages.
234239
type packageError struct {
235240
Errors []packages.Error

internal/vulncheck/slicing_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func Do(i I, input string) {
9191
})
9292

9393
graph := NewPackageGraph("go1.18")
94-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "/module/slice")})
94+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "/module/slice")}, true)
9595
if err != nil {
9696
t.Fatal(err)
9797
}

internal/vulncheck/source_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ func TestCalls(t *testing.T) {
191191

192192
// Load x and y as entry packages.
193193
graph := NewPackageGraph("go1.18")
194-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x"), path.Join(e.Temp(), "entry/y")})
194+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x"), path.Join(e.Temp(), "entry/y")}, true)
195195
if err != nil {
196196
t.Fatal(err)
197197
}
@@ -298,7 +298,7 @@ func TestAllSymbolsVulnerable(t *testing.T) {
298298

299299
// Load x as entry package.
300300
graph := NewPackageGraph("go1.18")
301-
err = graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")})
301+
err = graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}, true)
302302
if err != nil {
303303
t.Fatal(err)
304304
}
@@ -361,7 +361,7 @@ func TestNoSyntheticNodes(t *testing.T) {
361361

362362
// Load x as entry package.
363363
graph := NewPackageGraph("go1.18")
364-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")})
364+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}, true)
365365
if err != nil {
366366
t.Fatal(err)
367367
}
@@ -435,7 +435,7 @@ func TestRecursion(t *testing.T) {
435435

436436
// Load x as entry package.
437437
graph := NewPackageGraph("go1.18")
438-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")})
438+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}, true)
439439
if err != nil {
440440
t.Fatal(err)
441441
}
@@ -500,7 +500,7 @@ func TestIssue57174(t *testing.T) {
500500

501501
// Load x as entry package.
502502
graph := NewPackageGraph("go1.18")
503-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")})
503+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}, true)
504504
if err != nil {
505505
t.Fatal(err)
506506
}

internal/vulncheck/utils_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ func TestDbSymbolName(t *testing.T) {
228228
defer e.Cleanup()
229229

230230
graph := NewPackageGraph("go1.18")
231-
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "package/x")})
231+
err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "package/x")}, true)
232232
if err != nil {
233233
t.Fatal(err)
234234
}

internal/vulncheck/witness_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func TestInits(t *testing.T) {
182182

183183
// Load x as entry package.
184184
graph := NewPackageGraph("go1.18")
185-
err = graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")})
185+
err = graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}, true)
186186
if err != nil {
187187
t.Fatal(err)
188188
}

0 commit comments

Comments
 (0)