From ff0eeaca35816891a35ea4e3ea895068e895849b Mon Sep 17 00:00:00 2001 From: Carlos A Becker Date: Mon, 22 Aug 2022 22:06:20 -0300 Subject: [PATCH] fix: improve tar error handling --- pkg/archive/tar/tar.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pkg/archive/tar/tar.go b/pkg/archive/tar/tar.go index 9fa79059b60..21497ddd172 100644 --- a/pkg/archive/tar/tar.go +++ b/pkg/archive/tar/tar.go @@ -3,6 +3,7 @@ package tar import ( "archive/tar" + "fmt" "io" "os" @@ -30,18 +31,18 @@ func (a Archive) Close() error { func (a Archive) Add(f config.File) error { info, err := os.Lstat(f.Source) // #nosec if err != nil { - return err + return fmt.Errorf("%s: %w", f.Source, err) } var link string if info.Mode()&os.ModeSymlink != 0 { link, err = os.Readlink(f.Source) // #nosec if err != nil { - return err + return fmt.Errorf("%s: %w", f.Source, err) } } header, err := tar.FileInfoHeader(info, link) if err != nil { - return err + return fmt.Errorf("%s: %w", f.Source, err) } header.Name = f.Destination if !f.Info.MTime.IsZero() { @@ -59,16 +60,18 @@ func (a Archive) Add(f config.File) error { header.Gname = f.Info.Group } if err = a.tw.WriteHeader(header); err != nil { - return err + return fmt.Errorf("%s: %w", f.Source, err) } if info.IsDir() || info.Mode()&os.ModeSymlink != 0 { return nil } file, err := os.Open(f.Source) // #nosec if err != nil { - return err + return fmt.Errorf("%s: %w", f.Source, err) } defer file.Close() - _, err = io.Copy(a.tw, file) - return err + if _, err := io.Copy(a.tw, file); err != nil { + return fmt.Errorf("%s: %w", f.Source, err) + } + return nil }