From: Robert Griesemer Date: Thu, 1 Apr 2010 22:36:44 +0000 (-0700) Subject: debug/macho: don't crash when reading non-Mach-O files X-Git-Tag: weekly.2010-04-13~81 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4a6dfda4cc07f48a2d529c8013a6700e84e09c6b;p=gostls13.git debug/macho: don't crash when reading non-Mach-O files R=rsc CC=golang-dev https://golang.org/cl/838046 --- diff --git a/src/pkg/debug/macho/file.go b/src/pkg/debug/macho/file.go index 7c492ef524..018f71e141 100644 --- a/src/pkg/debug/macho/file.go +++ b/src/pkg/debug/macho/file.go @@ -167,7 +167,7 @@ func NewFile(r io.ReaderAt) (*File, os.Error) { // Read and decode Mach magic to determine byte order, size. // Magic32 and Magic64 differ only in the bottom bit. - var ident [4]uint8 + var ident [4]byte if _, err := r.ReadAt(&ident, 0); err != nil { return nil, err } @@ -180,6 +180,8 @@ func NewFile(r io.ReaderAt) (*File, os.Error) { case le &^ 1: f.ByteOrder = binary.LittleEndian f.Magic = le + default: + return nil, &FormatError{0, "invalid magic number", nil} } // Read entire file header. diff --git a/src/pkg/debug/macho/file_test.go b/src/pkg/debug/macho/file_test.go index d69e49cbfe..d4f3fc19c9 100644 --- a/src/pkg/debug/macho/file_test.go +++ b/src/pkg/debug/macho/file_test.go @@ -157,3 +157,11 @@ func TestOpen(t *testing.T) { } } + +func TestOpenFailure(t *testing.T) { + filename := "file.go" // not a Mach-O file + _, err := Open(filename) // don't crash + if err == nil { + t.Errorf("open %s: succeeded unexpectedly", filename) + } +}