mirror of
https://github.com/clearlinux/rkt.git
synced 2026-09-04 04:41:30 +00:00
tar: ensuring dir mode extraction
This commit is contained in:
committed by
Jonathan Boulle
parent
8dd5f9fdab
commit
31d332cbc1
@@ -47,6 +47,13 @@ func ExtractTar(tr *tar.Reader, dir string) error {
|
||||
if err := os.MkdirAll(p, fi.Mode()); err != nil {
|
||||
return err
|
||||
}
|
||||
dir, err := os.Open(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := dir.Chmod(fi.Mode()); err != nil {
|
||||
return err
|
||||
}
|
||||
case typ == tar.TypeLink:
|
||||
dest := filepath.Join(dir, hdr.Linkname)
|
||||
if !strings.HasPrefix(dest, dir) {
|
||||
|
||||
+12
-1
@@ -103,6 +103,13 @@ func TestExtractTarFolders(t *testing.T) {
|
||||
Size: 3,
|
||||
},
|
||||
},
|
||||
{
|
||||
header: &tar.Header{
|
||||
Name: "deep/folder/",
|
||||
Typeflag: tar.TypeDir,
|
||||
Mode: int64(0747),
|
||||
},
|
||||
},
|
||||
{
|
||||
contents: "bar",
|
||||
header: &tar.Header{
|
||||
@@ -116,7 +123,6 @@ func TestExtractTarFolders(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
defer os.Remove(testTarPath)
|
||||
containerTar, err := os.Open(testTarPath)
|
||||
if err != nil {
|
||||
@@ -143,4 +149,9 @@ func TestExtractTarFolders(t *testing.T) {
|
||||
if len(matches) != 2 {
|
||||
t.Errorf("unexpected number of files found: %d, wanted 2", len(matches))
|
||||
}
|
||||
dirInfo, err := os.Lstat(filepath.Join(tmpdir, "deep/folder"))
|
||||
if dirInfo.Mode().Perm() != os.FileMode(0747) {
|
||||
t.Errorf("unexpected dir mode: %s", dirInfo.Mode())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user