aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder
diff options
context:
space:
mode:
authorTim King <taking@google.com>2024-11-08 11:49:00 -0800
committerGo LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-11-12 19:51:37 +0000
commit3efbc30f3d6a35cb5b0fc29d8bb3f43d59304771 (patch)
tree1872749e12c0e76a14da2d2eea4668de9f6e4a61 /src/cmd/compile/internal/noder
parent95c729cf06d2d8d73832f9c9cfc83c0fb0051f54 (diff)
downloadgo-3efbc30f3d6a35cb5b0fc29d8bb3f43d59304771.tar.xz
cmd/compile/internal/noder,go/internal/gcimporter: return an error if not an archive file
Return an error from FindExportData variants if the contents are not an archive file. Change-Id: I2fa8d3553638ef1de6a03e2ce46341f00ed6965f Reviewed-on: https://go-review.googlesource.com/c/go/+/626697 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Robert Griesemer <gri@google.com> Commit-Queue: Tim King <taking@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder')
-rw-r--r--src/cmd/compile/internal/noder/import.go37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/cmd/compile/internal/noder/import.go b/src/cmd/compile/internal/noder/import.go
index 1e4c1ecb63..964b01ec42 100644
--- a/src/cmd/compile/internal/noder/import.go
+++ b/src/cmd/compile/internal/noder/import.go
@@ -266,27 +266,22 @@ func findExportData(f *os.File) (r *bio.Reader, end int64, err error) {
return
}
- if line == "!<arch>\n" { // package archive
- // package export block should be first
- sz := int64(archive.ReadHeader(r.Reader, "__.PKGDEF"))
- if sz <= 0 {
- err = errors.New("not a package file")
- return
- }
- end = r.Offset() + sz
- line, err = r.ReadString('\n')
- if err != nil {
- return
- }
- } else {
- // Not an archive; provide end of file instead.
- // TODO(mdempsky): I don't think this happens anymore.
- var fi os.FileInfo
- fi, err = f.Stat()
- if err != nil {
- return
- }
- end = fi.Size()
+ // Is the first line an archive file signature?
+ if line != "!<arch>\n" {
+ err = fmt.Errorf("not the start of an archive file (%q)", line)
+ return
+ }
+
+ // package export block should be first
+ sz := int64(archive.ReadHeader(r.Reader, "__.PKGDEF"))
+ if sz <= 0 {
+ err = errors.New("not a package file")
+ return
+ }
+ end = r.Offset() + sz
+ line, err = r.ReadString('\n')
+ if err != nil {
+ return
}
if !strings.HasPrefix(line, "go object ") {