From d02647242d0f8f9a51248889443340973768aac7 Mon Sep 17 00:00:00 2001 From: Hiroshi Ioka Date: Tue, 25 Jul 2017 11:34:30 +0900 Subject: [PATCH] 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 --- src/cmd/link/internal/ld/ar.go | 4 ++++ src/cmd/link/internal/ld/lib.go | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) 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 -- 2.48.1