aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/archive.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pkg/archive.go')
-rw-r--r--internal/pkg/archive.go34
1 files changed, 23 insertions, 11 deletions
diff --git a/internal/pkg/archive.go b/internal/pkg/archive.go
index 902d2c31..9f1b42d9 100644
--- a/internal/pkg/archive.go
+++ b/internal/pkg/archive.go
@@ -142,10 +142,7 @@ func (ar *Reader) Next() (*ArchiveHeader, error) {
}
}
- if n, err := ar.r.Read(ar.buf[:]); err != nil {
- if errors.Is(err, io.EOF) && n != 0 {
- err = io.ErrUnexpectedEOF
- }
+ if _, err := io.ReadFull(ar.r, ar.buf[:]); err != nil {
return nil, err
}
@@ -157,13 +154,9 @@ func (ar *Reader) Next() (*ArchiveHeader, error) {
pPathSize := alignSize(pathSize)
buf := make([]byte, pPathSize)
- if n, err := ar.r.Read(buf); err != nil {
+ if _, err := io.ReadFull(ar.r, buf); err != nil {
if errors.Is(err, io.EOF) {
- if n != len(buf) {
- return nil, io.ErrUnexpectedEOF
- }
- h.Path = unsafe.String(unsafe.SliceData(buf), pathSize)
- return &h, err
+ err = io.ErrUnexpectedEOF
}
return nil, err
}
@@ -330,6 +323,12 @@ func (a archiveArtifact) Cure(t *TContext) (err error) {
}
}()
+ type dirTargetPerm struct {
+ path string
+ mode fs.FileMode
+ }
+ var madeDirectories []dirTargetPerm
+
if err = os.MkdirAll(t.GetWorkDir().String(), 0700); err != nil {
return
}
@@ -379,7 +378,11 @@ func (a archiveArtifact) Cure(t *TContext) (err error) {
continue
}
- if err = root.Mkdir(header.Path, header.Mode.Perm()); err != nil {
+ madeDirectories = append(madeDirectories, dirTargetPerm{
+ path: header.Path,
+ mode: header.Mode,
+ })
+ if err = root.Mkdir(header.Path, 0700); err != nil {
return
}
} else {
@@ -389,5 +392,14 @@ func (a archiveArtifact) Cure(t *TContext) (err error) {
if errors.Is(err, io.EOF) {
err = nil
}
+ if err == nil {
+ for _, e := range madeDirectories {
+ if err = root.Chmod(e.path, e.mode.Perm()); err != nil {
+ return
+ }
+ }
+ } else {
+ return
+ }
return
}