Skip to content

Commit

Permalink
cmd/internal/buildid: reject empty id
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
rsc committed Aug 20, 2021
1 parent f67e31d commit 835ff47
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/cmd/internal/buildid/buildid_test.go
Expand Up @@ -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)
}
}
3 changes: 3 additions & 0 deletions src/cmd/internal/buildid/rewrite.go
Expand Up @@ -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")
}
Expand Down

0 comments on commit 835ff47

Please sign in to comment.