diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index 0d1d875b81..cb8435ee1c 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -319,7 +319,7 @@ func downloadZip(ctx context.Context, mod module.Version, zipfile string) (err e // // If the hash does not match go.sum (or the sumdb if enabled), hashZip returns // an error and does not write ziphashfile. -func hashZip(mod module.Version, zipfile, ziphashfile string) error { +func hashZip(mod module.Version, zipfile, ziphashfile string) (err error) { hash, err := dirhash.HashZip(zipfile, dirhash.DefaultHash) if err != nil { return err @@ -331,8 +331,11 @@ func hashZip(mod module.Version, zipfile, ziphashfile string) error { if err != nil { return err } - // issue 50858: lockedfile.File leaked in case of write error - defer hf.Close() + defer func() { + if closeErr := hf.Close(); err != nil { + err = closeErr + } + }() if err := hf.Truncate(int64(len(hash))); err != nil { return err }