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:
Mario Loriedo
2024-03-04 16:51:45 +01:00
parent 56e0f063bd
commit 724c5a06ba
2 changed files with 22 additions and 7 deletions

View File

@ -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)