diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index f11c2d9bed04ff7a36aeee2633d022fdc370eb9c..2b0eb7ca0dfcb62840f904845dacfc57feaedc1c 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -3381,6 +3381,7 @@ func PackagesAndErrorsOutsideModule(ctx context.Context, opts PackageOpts, args patterns[i] = p } } + patterns = search.CleanPatterns(patterns) // Query the module providing the first argument, load its go.mod file, and // check that it doesn't contain directives that would cause it to be diff --git a/src/cmd/go/internal/search/search.go b/src/cmd/go/internal/search/search.go index 0d83cbd47d3008305c83c9f6f9cada5823ba616c..0954b82a028304590968e190dde65ab512b46b07 100644 --- a/src/cmd/go/internal/search/search.go +++ b/src/cmd/go/internal/search/search.go @@ -419,9 +419,7 @@ func CleanPatterns(patterns []string) []string { if filepath.IsAbs(p) { p = filepath.Clean(p) } else { - if filepath.Separator == '\\' { - p = strings.ReplaceAll(p, `\`, `/`) - } + p = strings.ReplaceAll(p, `\`, `/`) // Put argument in canonical form, but preserve leading ./. if strings.HasPrefix(p, "./") { diff --git a/src/cmd/go/testdata/script/install_backslash.txt b/src/cmd/go/testdata/script/install_backslash.txt new file mode 100644 index 0000000000000000000000000000000000000000..adb359c8581a3989d554571aa885ca00f2411374 --- /dev/null +++ b/src/cmd/go/testdata/script/install_backslash.txt @@ -0,0 +1,12 @@ +# Issue #24233: allow backslash in path of command +go install -n rsc.io\fortune@v1.0.0 +! stderr 'malformed' + +mkdir m +cd m +go mod init example.com/m +go get rsc.io\fortune +! stderr 'malformed' + +go install -n rsc.io\fortune@v1.0.0 +! stderr 'malformed'