debug/buildinfo: add test for malformed strings

Updates #68592.

Change-Id: I00c6c740ca0bdd19af24e08a219ec3c90196097e
Reviewed-on: https://go-review.googlesource.com/c/go/+/601458
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
This commit is contained in:
Michael Pratt 2024-07-26 13:26:12 -04:00 committed by Gopher Robot
parent 28aed4015e
commit fd7d5a6e6c
1 changed files with 25 additions and 0 deletions

View File

@ -134,6 +134,22 @@ func TestReadFile(t *testing.T) {
}
}
damageStringLen := func(t *testing.T, name string) {
data, err := os.ReadFile(name)
if err != nil {
t.Fatal(err)
}
i := bytes.Index(data, []byte("\xff Go buildinf:"))
if i < 0 {
t.Fatal("Go buildinf not found")
}
verLen := data[i+32:]
binary.PutUvarint(verLen, 16<<40) // 16TB ought to be enough for anyone.
if err := os.WriteFile(name, data, 0666); err != nil {
t.Fatal(err)
}
}
goVersionRe := regexp.MustCompile("(?m)^go\t.*\n")
buildRe := regexp.MustCompile("(?m)^build\t.*\n")
cleanOutputForComparison := func(got string) string {
@ -193,6 +209,15 @@ func TestReadFile(t *testing.T) {
},
wantErr: "not a Go executable",
},
{
name: "invalid_str_len",
build: func(t *testing.T, goos, goarch, buildmode string) string {
name := buildWithModules(t, goos, goarch, buildmode)
damageStringLen(t, name)
return name
},
wantErr: "not a Go executable",
},
{
name: "valid_gopath",
build: buildWithGOPATH,