From: Michael Pratt Date: Fri, 26 Jul 2024 17:26:12 +0000 (-0400) Subject: debug/buildinfo: add test for malformed strings X-Git-Tag: go1.24rc1~1363 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fd7d5a6e6c56c79059b5ce4bb9f38897ad752b3c;p=gostls13.git 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 Reviewed-by: Cherry Mui Auto-Submit: Michael Pratt --- diff --git a/src/debug/buildinfo/buildinfo_test.go b/src/debug/buildinfo/buildinfo_test.go index 9f9756a22c..e78099da21 100644 --- a/src/debug/buildinfo/buildinfo_test.go +++ b/src/debug/buildinfo/buildinfo_test.go @@ -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,