tar: ensuring dir mode extraction

This commit is contained in:
Máximo Cuadros Ortiz
2014-12-11 18:30:07 -08:00
committed by Jonathan Boulle
parent 8dd5f9fdab
commit 31d332cbc1
2 changed files with 19 additions and 1 deletions
+7
View File
@@ -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
View File
@@ -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())
}
}