From: Hiroshi Ioka Date: Tue, 25 Jul 2017 02:34:30 +0000 (+0900) Subject: cmd/link: check magic header X-Git-Tag: go1.10beta1~1660 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d02647242d0f8f9a51248889443340973768aac7;p=gostls13.git cmd/link: check magic header Change-Id: I84b0e1d86728a76bc6a87fee4accf6fc43d87006 Reviewed-on: https://go-review.googlesource.com/54814 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/link/internal/ld/ar.go b/src/cmd/link/internal/ld/ar.go index 8827b76aed..c8115a67d7 100644 --- a/src/cmd/link/internal/ld/ar.go +++ b/src/cmd/link/internal/ld/ar.go @@ -82,6 +82,10 @@ func hostArchive(ctxt *Link, name string) { Exitf("file %s too short", name) } + if string(magbuf[:]) != ARMAG { + Exitf("%s is not an archive file", name) + } + var arhdr ArHdr l := nextar(f, f.Offset(), &arhdr) if l <= 0 { diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 023410512c..9955628038 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -724,8 +724,17 @@ func genhash(ctxt *Link, lib *Library) { } defer f.Close() + var magbuf [len(ARMAG)]byte + if _, err := io.ReadFull(f, magbuf[:]); err != nil { + Exitf("file %s too short", lib.File) + } + + if string(magbuf[:]) != ARMAG { + Exitf("%s is not an archive file", lib.File) + } + var arhdr ArHdr - l := nextar(f, int64(len(ARMAG)), &arhdr) + l := nextar(f, f.Offset(), &arhdr) if l <= 0 { Errorf(nil, "%s: short read on archive file symbol header", lib.File) return