From 70e8c907740bdb1d65483d97779d063539889b97 Mon Sep 17 00:00:00 2001 From: Erik Geiser Date: Wed, 5 Feb 2025 20:48:46 +0100 Subject: [PATCH] deb: Better errors and fewer shadowing danger during data.tar creation --- deb/deb.go | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/deb/deb.go b/deb/deb.go index a10e455f..a2f8efbb 100644 --- a/deb/deb.go +++ b/deb/deb.go @@ -387,36 +387,49 @@ func fillDataTar(info *nfpm.Info, w io.Writer) (md5sums []byte, instSize int64, } func createFilesInsideDataTar(info *nfpm.Info, tw *tar.Writer) (md5buf bytes.Buffer, instSize int64, err error) { - // create files and implicit directories for _, file := range info.Contents { - var size int64 // declare early to avoid shadowing err switch file.Type { case files.TypeRPMGhost: - // skip ghost files in deb - continue + continue // skip ghost files in deb case files.TypeDir, files.TypeImplicitDir: - header, headerErr := tarHeader(file, info.MTime) // headerErr to avoid shadowing err + header, err := tarHeader(file, info.MTime) if err != nil { - return md5buf, 0, fmt.Errorf("build directory header: %w", headerErr) + return md5buf, 0, fmt.Errorf("build directory header for %q: %w", + file.Destination, err) } err = tw.WriteHeader(header) + if err != nil { + return md5buf, 0, fmt.Errorf("create directory %q in data tar: %w", + header.Name, err) + } case files.TypeSymlink: - header, headerErr := tarHeader(file, info.MTime) // headerErr to avoid shadowing err + header, err := tarHeader(file, info.MTime) if err != nil { - return md5buf, 0, fmt.Errorf("build symlink header: %w", headerErr) + return md5buf, 0, fmt.Errorf("build symlink header for %q: %w", + file.Destination, err) } err = newItemInsideTar(tw, []byte{}, header) + if err != nil { + return md5buf, 0, fmt.Errorf("create symlink %q in data tar: %w", + header.Linkname, err) + } case files.TypeDebChangelog: - size, err = createChangelogInsideDataTar(tw, &md5buf, info, file.Destination) + size, err := createChangelogInsideDataTar(tw, &md5buf, info, file.Destination) + if err != nil { + return md5buf, 0, fmt.Errorf("write changelog to data tar: %w", err) + } + + instSize += size default: - size, err = copyToTarAndDigest(file, tw, &md5buf) - } - if err != nil { - return md5buf, 0, err + size, err := copyToTarAndDigest(file, tw, &md5buf) + if err != nil { + return md5buf, 0, fmt.Errorf("write %q to data tar: %w", file.Destination, err) + } + + instSize += size } - instSize += size } return md5buf, instSize, nil