]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/buildid: reject empty id
authorRuss Cox <rsc@golang.org>
Fri, 20 Aug 2021 19:20:10 +0000 (15:20 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 20 Aug 2021 20:20:19 +0000 (20:20 +0000)
The loop that makes progress assumes that after matching an id
you should advance len(id) bytes in the file. If id is the empty string,
then it will match and advance 0 bytes repeatedly.

0-byte ids are not really build IDs, so just reject it outright.

Fixes #47852.

Change-Id: Ie44a3a51dec22e2f68fb72d54ead91be98000cfe
Reviewed-on: https://go-review.googlesource.com/c/go/+/344049
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/internal/buildid/buildid_test.go
src/cmd/internal/buildid/rewrite.go

index e832f9987e582eb9b262c50f12aa4c8abae23fef..4895a49e1118a29c2546c5985aed6660ca70fbd0 100644 (file)
@@ -177,3 +177,11 @@ func TestExcludedReader(t *testing.T) {
                }
        }
 }
+
+func TestEmptyID(t *testing.T) {
+       r := strings.NewReader("aha!")
+       matches, hash, err := FindAndHash(r, "", 1000)
+       if matches != nil || hash != ([32]byte{}) || err == nil || !strings.Contains(err.Error(), "no id") {
+               t.Errorf("FindAndHash: want nil, [32]byte{}, no id specified, got %v, %v, %v", matches, hash, err)
+       }
+}
index a7928959c483da9f467fefb6209030c8d34b030d..8814950db0d83f142aaf551b1a2071e4ac59b66d 100644 (file)
@@ -22,6 +22,9 @@ func FindAndHash(r io.Reader, id string, bufSize int) (matches []int64, hash [32
        if bufSize == 0 {
                bufSize = 31 * 1024 // bufSize+little will likely fit in 32 kB
        }
+       if len(id) == 0 {
+               return nil, [32]byte{}, fmt.Errorf("buildid.FindAndHash: no id specified")
+       }
        if len(id) > bufSize {
                return nil, [32]byte{}, fmt.Errorf("buildid.FindAndHash: buffer too small")
        }