Fix for zero-sized layers

Moved a defer up to a better spot.

Fixed TestUntarPathWithInvalidDest to actually fail for the right reason

Closes #18170

Signed-off-by: Doug Davis <dug@us.ibm.com>
Upstream-commit: 7bb9fc415ac50abf5f754005264bfe152eeca7d6
Component: engine
This commit is contained in:
Doug Davis
2015-11-25 18:02:03 -08:00
parent ce48cb1f48
commit a047f4a27c
5 changed files with 26 additions and 6 deletions
+7 -1
View File
@@ -128,7 +128,13 @@ func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
p := pools.BufioReader32KPool
buf := p.Get(archive)
bs, err := buf.Peek(10)
if err != nil {
if err != nil && err != io.EOF {
// Note: we'll ignore any io.EOF error because there are some odd
// cases where the layer.tar file will be empty (zero bytes) and
// that results in an io.EOF from the Peek() call. So, in those
// cases we'll just treat it as a non-compressed stream and
// that means just create an empty layer.
// See Issue 18170
return nil, err
}
@@ -216,11 +216,16 @@ func TestUntarPathWithInvalidDest(t *testing.T) {
invalidDestFolder := path.Join(tempFolder, "invalidDest")
// Create a src file
srcFile := path.Join(tempFolder, "src")
_, err = os.Create(srcFile)
tarFile := path.Join(tempFolder, "src.tar")
os.Create(srcFile)
os.Create(invalidDestFolder) // being a file (not dir) should cause an error
cmd := exec.Command("/bin/sh", "-c", "tar cf "+tarFile+" "+srcFile)
_, err = cmd.CombinedOutput()
if err != nil {
t.Fatalf("Fail to create the source file")
t.Fatal(err)
}
err = UntarPath(srcFile, invalidDestFolder)
err = UntarPath(tarFile, invalidDestFolder)
if err == nil {
t.Fatalf("UntarPath with invalid destination path should throw an error.")
}