]> Cypherpunks repositories - gostls13.git/commitdiff
debug/buildinfo: add test for malformed strings
authorMichael Pratt <mpratt@google.com>
Fri, 26 Jul 2024 17:26:12 +0000 (13:26 -0400)
committerGopher Robot <gobot@golang.org>
Mon, 29 Jul 2024 15:34:55 +0000 (15:34 +0000)
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>

src/debug/buildinfo/buildinfo_test.go

index 9f9756a22c2fbb21a22493e0c243afabb8dd90d7..e78099da21676c56331d5985a8fd30c8ae2314c1 100644 (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,