Merge pull request #17088 from Microsoft/sjw/archive_hang_fix

Fixing hang in archive.CopyFileWithTar with invalid dst
This commit is contained in:
Jess Frazelle 2015-10-19 17:18:25 -07:00
commit a45713d529
2 changed files with 27 additions and 1 deletions

View file

@ -914,7 +914,11 @@ func (archiver *Archiver) CopyFileWithTar(src, dst string) (err error) {
}
}()
return archiver.Untar(r, filepath.Dir(dst), nil)
err = archiver.Untar(r, filepath.Dir(dst), nil)
if err != nil {
r.CloseWithError(err)
}
return err
}
// CopyFileWithTar emulates the behavior of the 'cp' command-line

View file

@ -3,10 +3,32 @@
package archive
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
)
func TestCopyFileWithInvalidDest(t *testing.T) {
folder, err := ioutil.TempDir("", "docker-archive-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(folder)
dest := "c:dest"
srcFolder := filepath.Join(folder, "src")
src := filepath.Join(folder, "src", "src")
err = os.MkdirAll(srcFolder, 0740)
if err != nil {
t.Fatal(err)
}
ioutil.WriteFile(src, []byte("content"), 0777)
err = CopyWithTar(src, dest)
if err == nil {
t.Fatalf("archiver.CopyWithTar should throw an error on invalid dest.")
}
}
func TestCanonicalTarNameForPath(t *testing.T) {
cases := []struct {
in, expected string