aboutsummaryrefslogtreecommitdiff
path: root/src/debug/macho
diff options
context:
space:
mode:
Diffstat (limited to 'src/debug/macho')
-rw-r--r--src/debug/macho/fat.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/debug/macho/fat.go b/src/debug/macho/fat.go
index 6bd730dc0b..775beaf12c 100644
--- a/src/debug/macho/fat.go
+++ b/src/debug/macho/fat.go
@@ -7,6 +7,7 @@ package macho
import (
"encoding/binary"
"fmt"
+ "internal/saferio"
"io"
"os"
)
@@ -85,9 +86,13 @@ func NewFatFile(r io.ReaderAt) (*FatFile, error) {
// Following the fat_header comes narch fat_arch structs that index
// Mach-O images further in the file.
- ff.Arches = make([]FatArch, narch)
+ c := saferio.SliceCap(FatArch{}, uint64(narch))
+ if c < 0 {
+ return nil, &FormatError{offset, "too many images", nil}
+ }
+ ff.Arches = make([]FatArch, 0, c)
for i := uint32(0); i < narch; i++ {
- fa := &ff.Arches[i]
+ var fa FatArch
err = binary.Read(sr, binary.BigEndian, &fa.FatArchHeader)
if err != nil {
return nil, &FormatError{offset, "invalid fat_arch header", nil}
@@ -115,6 +120,8 @@ func NewFatFile(r io.ReaderAt) (*FatFile, error) {
return nil, &FormatError{offset, fmt.Sprintf("Mach-O type for architecture #%d (type=%#x) does not match first (type=%#x)", i, fa.Type, machoType), nil}
}
}
+
+ ff.Arches = append(ff.Arches, fa)
}
return &ff, nil