summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2010-04-01 15:36:44 -0700
committerRobert Griesemer <gri@golang.org>2010-04-01 15:36:44 -0700
commit99c1560944c0799a9a4f3fa0786817d8048f50c5 (patch)
treeff693228aed0a440e7d57bd17e2699fdd0e140e4
parent2c9e1806123a6f7d690c8d441dc791f995836e0c (diff)
downloadgolang-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.go4
-rw-r--r--src/pkg/debug/macho/file_test.go8
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)
+ }
+}