diff options
| author | Tim King <taking@google.com> | 2024-11-08 11:49:00 -0800 |
|---|---|---|
| committer | Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-11-12 19:51:37 +0000 |
| commit | 3efbc30f3d6a35cb5b0fc29d8bb3f43d59304771 (patch) | |
| tree | 1872749e12c0e76a14da2d2eea4668de9f6e4a61 /src/cmd/compile/internal/noder | |
| parent | 95c729cf06d2d8d73832f9c9cfc83c0fb0051f54 (diff) | |
| download | go-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.go | 37 |
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 ") { |
