diff options
author | Robert Griesemer <gri@golang.org> | 2010-04-01 15:36:44 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2010-04-01 15:36:44 -0700 |
commit | 99c1560944c0799a9a4f3fa0786817d8048f50c5 (patch) | |
tree | ff693228aed0a440e7d57bd17e2699fdd0e140e4 | |
parent | 2c9e1806123a6f7d690c8d441dc791f995836e0c (diff) | |
download | golang-99c1560944c0799a9a4f3fa0786817d8048f50c5.tar.gz |
debug/macho: don't crash when reading non-Mach-O files
R=rsc
CC=golang-dev
http://codereview.appspot.com/838046
-rw-r--r-- | src/pkg/debug/macho/file.go | 4 | ||||
-rw-r--r-- | src/pkg/debug/macho/file_test.go | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/pkg/debug/macho/file.go b/src/pkg/debug/macho/file.go index 7c492ef52..018f71e14 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 d69e49cbf..d4f3fc19c 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) + } +} |