mirror of https://github.com/golang/go.git
debug/pe: check size in uint64 to avoid overflow
uint32(sz) != n*uint32(ddSz) can go wrong if the RHS overflows, so do it in wider precision. Fixes #54640. Change-Id: I776563330e46de6cdacd4055f6ff08e7de67797f Reviewed-on: https://go-review.googlesource.com/c/go/+/425364 Reviewed-by: Dan Kortschak <dan@kortschak.io> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
846c378b8c
commit
7f92ccea5c
|
|
@ -603,8 +603,8 @@ func readOptionalHeader(r io.ReadSeeker, sz uint16) (any, error) {
|
|||
// its size and number of data directories as seen in optional header.
|
||||
// It parses the given size of bytes and returns given number of data directories.
|
||||
func readDataDirectories(r io.ReadSeeker, sz uint16, n uint32) ([]DataDirectory, error) {
|
||||
ddSz := binary.Size(DataDirectory{})
|
||||
if uint32(sz) != n*uint32(ddSz) {
|
||||
ddSz := uint64(binary.Size(DataDirectory{}))
|
||||
if uint64(sz) != uint64(n)*ddSz {
|
||||
return nil, fmt.Errorf("size of data directories(%d) is inconsistent with number of data directories(%d)", sz, n)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue