From: Than McIntosh Date: Wed, 16 Oct 2019 16:31:33 +0000 (-0400) Subject: [dev.link] cmd/objdump: switch to using NewReaderFromBytes X-Git-Tag: go1.14beta1~292^2^2~41 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e5acb58c394c7d900d9aa948a9b601c49c97ab09;p=gostls13.git [dev.link] cmd/objdump: switch to using NewReaderFromBytes Convert the object file dumper to use NewReaderFromBytes when reading new object files, as opposed to NewReader. Change-Id: I9f5e0356bd21c16f545cdd70262e983a2ed38bfc Reviewed-on: https://go-review.googlesource.com/c/go/+/201441 Run-TryBot: Than McIntosh TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/internal/goobj/read.go b/src/cmd/internal/goobj/read.go index 2a3afffeb0..e61e95dcc8 100644 --- a/src/cmd/internal/goobj/read.go +++ b/src/cmd/internal/goobj/read.go @@ -502,12 +502,15 @@ func (r *objReader) parseObject(prefix []byte) error { } // TODO: extract OS + build ID if/when we need it - r.readFull(r.tmp[:8]) - if bytes.Equal(r.tmp[:8], []byte("\x00go114LD")) { - r.offset -= 8 + p, err := r.peek(8) + if err != nil { + return err + } + if bytes.Equal(p, []byte("\x00go114LD")) { r.readNew() return nil } + r.readFull(r.tmp[:8]) if !bytes.Equal(r.tmp[:8], []byte("\x00go114ld")) { return r.error(errCorruptObject) } diff --git a/src/cmd/internal/goobj/readnew.go b/src/cmd/internal/goobj/readnew.go index e5dc652800..de05f37c3b 100644 --- a/src/cmd/internal/goobj/readnew.go +++ b/src/cmd/internal/goobj/readnew.go @@ -15,7 +15,11 @@ import ( // the data to the current goobj API. func (r *objReader) readNew() { start := uint32(r.offset) - rr := goobj2.NewReader(r.f, start) + + length := r.limit - r.offset + objbytes := make([]byte, length) + r.readFull(objbytes) + rr := goobj2.NewReaderFromBytes(objbytes, false) if rr == nil { panic("cannot read object file") }