mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									87e7ee9142
								
							
						
					
					
						commit
						7bb9fc415a
					
				
					 5 changed files with 26 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -112,12 +112,12 @@ func (l *tarexporter) loadLayer(filename string, rootFS image.RootFS) (layer.Lay
 | 
			
		|||
		logrus.Debugf("Error reading embedded tar: %v", err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer rawTar.Close()
 | 
			
		||||
 | 
			
		||||
	inflatedLayerData, err := archive.DecompressStream(rawTar)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defer rawTar.Close()
 | 
			
		||||
	defer inflatedLayerData.Close()
 | 
			
		||||
 | 
			
		||||
	return l.ls.Register(inflatedLayerData, rootFS.ChainID())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -291,3 +291,12 @@ func (s *DockerSuite) TestSaveDirectoryPermissions(c *check.C) {
 | 
			
		|||
	c.Assert(found, checker.Equals, true, check.Commentf("failed to find the layer with the right content listing"))
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Test loading a weird image where one of the layers is of zero size.
 | 
			
		||||
// The layer.tar file is actually zero bytes, no padding or anything else.
 | 
			
		||||
// See issue: 18170
 | 
			
		||||
func (s *DockerSuite) TestLoadZeroSizeLayer(c *check.C) {
 | 
			
		||||
	testRequires(c, DaemonIsLinux)
 | 
			
		||||
 | 
			
		||||
	dockerCmd(c, "load", "-i", "fixtures/load/emptyLayer.tar")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								integration-cli/fixtures/load/emptyLayer.tar
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								integration-cli/fixtures/load/emptyLayer.tar
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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.")
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue