Skip to content

Commit 019bf34

Browse files
committed
zip: allow packages containing non-top-level /vendor/ part
This fixes https://golang.org/issues/71785
1 parent dc121ce commit 019bf34

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

zip/vendor_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ var pre124 []string = []string{
2020

2121
var after124 []string = []string{"go1.24.0", "go1.24", "go1.99.0"}
2222

23+
var (
24+
pre125 = append(pre124, "go1.24.0")
25+
after125 = []string{"go1.25.0"}
26+
)
27+
2328
var allVers []string = append(pre124, after124...)
2429

2530
func TestIsVendoredPackage(t *testing.T) {
@@ -29,8 +34,6 @@ func TestIsVendoredPackage(t *testing.T) {
2934
versions []string
3035
}{
3136
{path: "vendor/foo/foo.go", want: true, versions: allVers},
32-
{path: "pkg/vendor/foo/foo.go", want: true, versions: allVers},
33-
{path: "longpackagename/vendor/foo/foo.go", want: true, versions: allVers},
3437
{path: "vendor/vendor.go", want: false, versions: allVers},
3538
{path: "vendor/foo/modules.txt", want: true, versions: allVers},
3639
{path: "modules.txt", want: false, versions: allVers},
@@ -45,6 +48,11 @@ func TestIsVendoredPackage(t *testing.T) {
4548
{path: "pkg/vendor/vendor.go", want: false, versions: after124},
4649
{path: "longpackagename/vendor/vendor.go", want: true, versions: pre124},
4750
{path: "longpackagename/vendor/vendor.go", want: false, versions: after124},
51+
// allow vendor package names in non-root of the module
52+
{path: "pkg/vendor/foo/foo.go", want: true, versions: pre125},
53+
{path: "longpackagename/vendor/foo/foo.go", want: true, versions: pre125},
54+
{path: "pkg/vendor/foo/foo.go", want: false, versions: after125},
55+
{path: "longpackagename/vendor/foo/foo.go", want: false, versions: after125},
4856
} {
4957
for _, v := range tc.versions {
5058
got := isVendoredPackage(tc.path, v)

zip/zip.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import (
5656
"os/exec"
5757
"path"
5858
"path/filepath"
59+
"regexp"
5960
"strings"
6061
"time"
6162
"unicode"
@@ -797,6 +798,13 @@ func isVendoredPackage(name string, vers string) bool {
797798
if version.Compare(vers, "go1.24") >= 0 && name == "vendor/modules.txt" {
798799
return true
799800
}
801+
802+
if version.Compare(vers, "go1.25") >= 0 {
803+
// ref: https://golang.org/issues/71785
804+
// allows non-top-level vendor packages.
805+
return regexp.MustCompile("^vendor/.*/").MatchString(name)
806+
}
807+
800808
var i int
801809
if strings.HasPrefix(name, "vendor/") {
802810
i += len("vendor/")

0 commit comments

Comments
 (0)