From: David Chase Date: Wed, 24 Aug 2022 19:53:40 +0000 (-0400) Subject: debug/pe: check size in uint64 to avoid overflow X-Git-Tag: go1.20rc1~1371 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7f92ccea5ca5832a1dc63c02fc71db2d698f7915;p=gostls13.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 Reviewed-by: Ian Lance Taylor Run-TryBot: David Chase TryBot-Result: Gopher Robot --- diff --git a/src/debug/pe/file.go b/src/debug/pe/file.go index 9181ebdf15..7adf3e122e 100644 --- a/src/debug/pe/file.go +++ b/src/debug/pe/file.go @@ -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) }