diff --git a/go.mod b/go.mod index 91515acd1c..1967d6f5a0 100644 --- a/go.mod +++ b/go.mod @@ -64,7 +64,7 @@ require ( github.com/mitchellh/copystructure v1.2.0 github.com/moby/buildkit v0.32.0 github.com/moby/docker-image-spec v1.3.1 - github.com/moby/go-archive v0.3.0 + github.com/moby/go-archive v0.3.1 github.com/moby/ipvs v1.1.0 github.com/moby/locker v1.0.1 github.com/moby/moby/api v1.55.0 diff --git a/go.sum b/go.sum index 1860c27b24..5e469fcd37 100644 --- a/go.sum +++ b/go.sum @@ -547,8 +547,8 @@ github.com/moby/buildkit v0.32.0 h1:slXarYQoMo4cp2d9x30M9t0L4R+c0CVMov+5P1hhiHY= github.com/moby/buildkit v0.32.0/go.mod h1:Y10FBWvqxl/Wmhdzjee1Y2wQfjifTiwxENIUdaVNdME= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.3.0 h1:nos4BtzzUIqB406BgQnWGMI4qib9BZ8XUHU+ucv/n1c= -github.com/moby/go-archive v0.3.0/go.mod h1:Npdv43fFqlhZW7Xo8fbm3ZMYFvAGNviUPqX21VERbcE= +github.com/moby/go-archive v0.3.1 h1:AHwfS8lTrPOb4rg9IFuc3k5Xg7jCzYidPt8SimWPHLM= +github.com/moby/go-archive v0.3.1/go.mod h1:Npdv43fFqlhZW7Xo8fbm3ZMYFvAGNviUPqX21VERbcE= github.com/moby/ipvs v1.1.0 h1:ONN4pGaZQgAx+1Scz5RvWV4Q7Gb+mvfRh3NsPS+1XQQ= github.com/moby/ipvs v1.1.0/go.mod h1:4VJMWuf098bsUMmZEiD4Tjk/O7mOn3l1PTD3s4OoYAs= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= diff --git a/vendor/github.com/moby/go-archive/archive.go b/vendor/github.com/moby/go-archive/archive.go index 4d9e87d204..2bcadec556 100644 --- a/vendor/github.com/moby/go-archive/archive.go +++ b/vendor/github.com/moby/go-archive/archive.go @@ -698,13 +698,13 @@ func (t *Tarballer) Do() { defer func() { // Make sure to check the error on Close. - if err := ta.TarWriter.Close(); err != nil { + if err := ta.TarWriter.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { log.G(context.TODO()).Errorf("Can't close tar writer: %s", err) } - if err := t.compressWriter.Close(); err != nil { + if err := t.compressWriter.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { log.G(context.TODO()).Errorf("Can't close compress writer: %s", err) } - if err := t.pipeWriter.Close(); err != nil { + if err := t.pipeWriter.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { log.G(context.TODO()).Errorf("Can't close pipe writer: %s", err) } }() @@ -1034,71 +1034,68 @@ func unrepresentableOnWindows(hdr *tar.Header) error { // destination at the OS level (openat(2) semantics), preventing escape via // symlinks in the destination tree. func createImpliedDirectories(root *os.Root, hdr *tar.Header, options *TarOptions) error { - // For non-directory entries, ensure that the parent directory exists. - if hdr.Typeflag != tar.TypeDir { - parent := filepath.FromSlash(path.Dir(strings.TrimSuffix(hdr.Name, "/"))) - // Skip when the parent is the root itself; nothing to create. - if parent == "." || parent == "" { - return nil - } - if _, err := root.Lstat(parent); err == nil { - return nil - } else if !os.IsNotExist(err) { - return err - } - // RootPair() is confined inside this loop as most cases will not require a call, so we can spend some - // unneeded function calls in the uncommon case to encapsulate logic -- implied directories are a niche - // usage that reduces the portability of an image. - uid, gid := options.IDMap.RootPair() + parent := filepath.FromSlash(path.Dir(strings.TrimSuffix(hdr.Name, "/"))) + // Skip when the parent is the root itself; nothing to create. + if parent == "." || parent == "" { + return nil + } + if _, err := root.Lstat(parent); err == nil { + return nil + } else if !os.IsNotExist(err) { + return err + } + // RootPair() is confined inside this loop as most cases will not require a call, so we can spend some + // unneeded function calls in the uncommon case to encapsulate logic -- implied directories are a niche + // usage that reduces the portability of an image. + uid, gid := options.IDMap.RootPair() - // Similar to [user.MkdirAllAndChown] - // - // [user.MkdirAllAndChown]: https://pkg.go.dev/github.com/moby/sys/user#MkdirAllAndChown - var cur string - for c := range strings.SplitSeq(parent, string(os.PathSeparator)) { - if c == "" { - continue + // Similar to [user.MkdirAllAndChown] + // + // [user.MkdirAllAndChown]: https://pkg.go.dev/github.com/moby/sys/user#MkdirAllAndChown + var cur string + for c := range strings.SplitSeq(parent, string(os.PathSeparator)) { + if c == "" { + continue + } + cur = filepath.Join(cur, c) + if err := root.Mkdir(cur, ImpliedDirectoryMode); err != nil { + if !errors.Is(err, os.ErrExist) { + return err } - cur = filepath.Join(cur, c) - if err := root.Mkdir(cur, ImpliedDirectoryMode); err != nil { - if !errors.Is(err, os.ErrExist) { - return err - } - fi, err := root.Stat(cur) - if err != nil { - return err - } - if fi.IsDir() { - continue - } - return &os.PathError{Op: "mkdir", Path: cur, Err: syscall.ENOTDIR} - } - if options.NoLchown { - continue - } - // Only the successful Mkdir case is newly-created. - dir, err := root.Open(cur) + fi, err := root.Stat(cur) if err != nil { return err } - if uid != 0 || gid != 0 { - if err := dir.Chown(uid, gid); err != nil { - _ = dir.Close() - return err - } + if fi.IsDir() { + continue } - // root.Mkdir applies the mode subject to the process umask, so - // re-apply it with Chmod to guarantee ImpliedDirectoryMode - // independent of umask, matching the previous MkdirAllAndChown - // behavior. - if err := dir.Chmod(ImpliedDirectoryMode); err != nil { + return &os.PathError{Op: "mkdir", Path: cur, Err: syscall.ENOTDIR} + } + if options.NoLchown { + continue + } + // Only the successful Mkdir case is newly-created. + dir, err := root.Open(cur) + if err != nil { + return err + } + if uid != 0 || gid != 0 { + if err := dir.Chown(uid, gid); err != nil { _ = dir.Close() return err } - if err := dir.Close(); err != nil { - return err - } + } + // root.Mkdir applies the mode subject to the process umask, so + // re-apply it with Chmod to guarantee ImpliedDirectoryMode + // independent of umask, matching the previous MkdirAllAndChown + // behavior. + if err := dir.Chmod(ImpliedDirectoryMode); err != nil { + _ = dir.Close() + return err + } + if err := dir.Close(); err != nil { + return err } } diff --git a/vendor/modules.txt b/vendor/modules.txt index a2972b8a5e..1cbf14b5be 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1266,7 +1266,7 @@ github.com/moby/buildkit/worker/label # github.com/moby/docker-image-spec v1.3.1 ## explicit; go 1.18 github.com/moby/docker-image-spec/specs-go/v1 -# github.com/moby/go-archive v0.3.0 +# github.com/moby/go-archive v0.3.1 ## explicit; go 1.25 github.com/moby/go-archive github.com/moby/go-archive/chrootarchive