Skip to content

Commit

Permalink
cmd/mod/edit: disallow relative tool paths
Browse files Browse the repository at this point in the history
Allowing relative paths in `go.mod` introduced an inconsistency as we do
not allow relative package paths anywhere else.

For #48429

Change-Id: I5ef88aec4fe35f7e94a0cf6288e94099f3ca7a0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/614555
Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
  • Loading branch information
ConradIrwin authored and matloob committed Sep 20, 2024
1 parent 402dc98 commit 097b716
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 34 deletions.
23 changes: 2 additions & 21 deletions src/cmd/go/internal/modcmd/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,25 +339,6 @@ func parsePath(flag, arg string) (path string) {
return path
}

// parsePath parses -flag=arg expecting arg to be path to a tool (allows ./)
func parseToolPath(flag, arg string) (path string) {
if strings.Contains(arg, "@") {
base.Fatalf("go: -%s=%s: need just path, not path@version", flag, arg)
}
if arg == "." {
return arg
}
toCheck := arg
if strings.HasPrefix(arg, "./") {
toCheck = arg[2:]
}
if err := module.CheckImportPath(toCheck); err != nil {
base.Fatalf("go: -%s=%s: invalid path: %v", flag, arg, err)
}

return arg
}

// parsePathVersionOptional parses path[@version], using adj to
// describe any errors.
func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version string, err error) {
Expand Down Expand Up @@ -547,7 +528,7 @@ func flagDropRetract(arg string) {

// flagTool implements the -tool flag.
func flagTool(arg string) {
path := parseToolPath("tool", arg)
path := parsePath("tool", arg)
edits = append(edits, func(f *modfile.File) {
if err := f.AddTool(path); err != nil {
base.Fatalf("go: -tool=%s: %v", arg, err)
Expand All @@ -557,7 +538,7 @@ func flagTool(arg string) {

// flagDropTool implements the -droptool flag.
func flagDropTool(arg string) {
path := parseToolPath("droptool", arg)
path := parsePath("droptool", arg)
edits = append(edits, func(f *modfile.File) {
if err := f.DropTool(path); err != nil {
base.Fatalf("go: -droptool=%s: %v", arg, err)
Expand Down
13 changes: 0 additions & 13 deletions src/cmd/go/testdata/script/mod_edit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,6 @@ cd $WORK/h
cp go.mod.start go.mod
go mod edit -tool example.com/tool
cmpenv go.mod go.mod.edit
go mod edit -tool ./local
cmpenv go.mod go.mod.edit2
go mod edit -droptool ./local
cmpenv go.mod go.mod.edit
go mod edit -droptool example.com/tool2
cmpenv go.mod go.mod.edit
go mod edit -droptool example.com/tool
Expand Down Expand Up @@ -386,12 +382,3 @@ module g
go 1.24

tool example.com/tool
-- $WORK/h/go.mod.edit2 --
module g

go 1.24

tool (
./local
example.com/tool
)

0 comments on commit 097b716

Please sign in to comment.