mirror of
https://github.com/containers/podman.git
synced 2025-10-17 19:24:04 +08:00
Don't read full VM File before decompressing
While working on #21592 we figured out that the the full VM File was loaded in memory when detecting the file format, but only a few bytes are needed. This commit address that. [NO NEW TESTS NEEDED] Signed-off-by: Mario Loriedo <mario.loriedo@gmail.com>
This commit is contained in:
@ -19,6 +19,7 @@ const (
|
||||
macOs = "darwin"
|
||||
progressBarPrefix = "Extracting compressed file"
|
||||
zipExt = ".zip"
|
||||
magicNumberMaxBytes = 10
|
||||
)
|
||||
|
||||
type decompressor interface {
|
||||
@ -31,24 +32,21 @@ type decompressor interface {
|
||||
|
||||
func Decompress(compressedVMFile *define.VMFile, decompressedFilePath string) error {
|
||||
compressedFilePath := compressedVMFile.GetPath()
|
||||
// Are we reading full image file?
|
||||
// Only few bytes are read to detect
|
||||
// the compression type
|
||||
compressedFileContent, err := compressedVMFile.Read()
|
||||
compressedFileMagicNum, err := compressedVMFile.ReadMagicNumber(magicNumberMaxBytes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var d decompressor
|
||||
if d, err = newDecompressor(compressedFilePath, compressedFileContent); err != nil {
|
||||
if d, err = newDecompressor(compressedFilePath, compressedFileMagicNum); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return runDecompression(d, decompressedFilePath)
|
||||
}
|
||||
|
||||
func newDecompressor(compressedFilePath string, compressedFileContent []byte) (decompressor, error) {
|
||||
compressionType := archive.DetectCompression(compressedFileContent)
|
||||
func newDecompressor(compressedFilePath string, compressedFileMagicNum []byte) (decompressor, error) {
|
||||
compressionType := archive.DetectCompression(compressedFileMagicNum)
|
||||
os := runtime.GOOS
|
||||
hasZipSuffix := strings.HasSuffix(compressedFilePath, zipExt)
|
||||
|
||||
|
Reference in New Issue
Block a user