]> Cypherpunks repositories - gostls13.git/commitdiff
debug/macho: don't crash when reading non-Mach-O files
authorRobert Griesemer <gri@golang.org>
Thu, 1 Apr 2010 22:36:44 +0000 (15:36 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 1 Apr 2010 22:36:44 +0000 (15:36 -0700)
R=rsc
CC=golang-dev
https://golang.org/cl/838046

src/pkg/debug/macho/file.go
src/pkg/debug/macho/file_test.go

index 7c492ef5247dbad6bf0a261ca771260c592b5c81..018f71e14154bf32c1a962b0615a37406206e017 100644 (file)
@@ -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.
index d69e49cbfe715fe48ad338ccf982e7988d90b0a3..d4f3fc19c9ae09ad8533aca9dbedcd3946e7f4ee 100644 (file)
@@ -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)
+       }
+}