Skip to content

Commit eb29d0a

Browse files
fix(go): 间接依赖识别错误
1 parent 9d723ce commit eb29d0a

File tree

3 files changed

+74
-17
lines changed

3 files changed

+74
-17
lines changed

module/go_mod/error.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

module/go_mod/goModTidy.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package go_mod
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"errors"
7+
"github.com/murphysecurity/murphysec/infra/logctx"
8+
"go.uber.org/zap"
9+
"os"
10+
"os/exec"
11+
"strings"
12+
)
13+
14+
const (
15+
sourceError = "no secure protocol found for repository"
16+
)
17+
18+
func setPrivate(ctx context.Context, privateUrl string) error {
19+
20+
privateUrlList := os.Getenv("GOPRIVATE")
21+
privateUrlList = privateUrlList + "," + privateUrl
22+
if err := os.Setenv("GOPRIVATE", privateUrlList); err != nil {
23+
logctx.Use(ctx).Error("Failed to set GOPRIVATE", zap.Error(err))
24+
return err
25+
}
26+
logctx.Use(ctx).Info("set GOPRIVATE = " + privateUrlList)
27+
return nil
28+
}
29+
func goModTidyError(ctx context.Context, msg string) error {
30+
if strings.Contains(msg, sourceError) {
31+
var privateUrl string
32+
if u := strings.Split(msg, "/"); len(u) > 1 {
33+
privateUrl = u[0]
34+
if privateUrl != "" {
35+
return setPrivate(ctx, privateUrl)
36+
}
37+
}
38+
}
39+
return nil
40+
}
41+
func goModTidy(ctx context.Context, path string) error {
42+
logger := logctx.Use(ctx)
43+
var stdErr bytes.Buffer
44+
var againBol = false
45+
logger.Debug("go mod tidy :" + path)
46+
again:
47+
48+
cmd := exec.Command("go", "mod", "tidy")
49+
cmd.Stderr = &stdErr
50+
cmd.Dir = path
51+
if err := cmd.Start(); err != nil {
52+
logctx.Use(ctx).Error("Command finished with error" + err.Error())
53+
return err
54+
}
55+
cmd.Wait()
56+
57+
if againBol {
58+
return errors.New(stdErr.String())
59+
}
60+
if stdErr.Len() > 0 {
61+
if err := goModTidyError(ctx, stdErr.String()); err != nil {
62+
return err
63+
} else {
64+
againBol = true
65+
goto again
66+
}
67+
}
68+
return nil
69+
}

module/go_mod/gotree.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,10 @@ func checkNetworkEnvironment(ctx context.Context) bool {
5353
}
5454
return false
5555
}
56-
func goModTidy(ctx context.Context, path string) error {
57-
logger := logctx.Use(ctx)
58-
logger.Debug("go mod tidy :" + path)
59-
_, err := os.Stat(path)
60-
if err != nil {
61-
cmd := exec.Command("go", "mod", "tidy")
62-
if err := cmd.Start(); err != nil {
63-
return err
64-
}
65-
}
66-
return nil
67-
}
56+
6857
func buildScan(ctx context.Context) error {
6958
task := model.UseInspectionTask(ctx)
7059
logger := logctx.Use(ctx)
71-
7260
if !checkNetworkEnvironment(ctx) {
7361
return errors.New("network environment error")
7462
}
@@ -114,7 +102,6 @@ func buildScan(ctx context.Context) error {
114102
ModuleName: modName,
115103
Dependencies: dependencies,
116104
}
117-
118105
task.AddModule(m)
119106
return nil
120107
}
@@ -140,7 +127,9 @@ func buildingDependencyTree(dInfo map[string]string, d *model.DependencyItem, so
140127
IsDirectDependency: false,
141128
}
142129
(*packageToPackageUsed)[d.CompName] = append((*packageToPackageUsed)[d.CompName], j)
143-
d.Dependencies = append(d.Dependencies, buildingDependencyTree(dInfo, &mod, sonTree, packageToPackageUsed, logger))
130+
t := buildingDependencyTree(dInfo, &mod, sonTree, packageToPackageUsed, logger)
131+
t.IsDirectDependency = false
132+
d.Dependencies = append(d.Dependencies, t)
144133
}
145134
}
146135
}
@@ -294,7 +283,7 @@ func readGraphCmd(ctx context.Context, dir string, directDependencyList map[stri
294283
}
295284
sonTree[name] = append(sonTree[name], n)
296285
}
297-
logger.Debug("go: " + text)
286+
// logger.Debug("go: " + text)
298287
}
299288
stdout.Close()
300289
if err := cmd.Wait(); err != nil {

0 commit comments

Comments
 (0)