diff --git a/pkg/util/fileutils2/fileutils.go b/pkg/util/fileutils2/fileutils.go index 30e81e019a..d7685dd4ae 100644 --- a/pkg/util/fileutils2/fileutils.go +++ b/pkg/util/fileutils2/fileutils.go @@ -20,6 +20,7 @@ import ( "bytes" "compress/gzip" "fmt" + "io" "io/ioutil" "os" "path" @@ -474,10 +475,23 @@ func IsTarGzipFile(fPath string) bool { return false } - tarReader := tar.NewReader(gzf) - _, err = tarReader.Next() + return IsTarStream(gzf) +} + +func IsTarStream(f io.Reader) bool { + tarReader := tar.NewReader(f) + _, err := tarReader.Next() if err != nil { return false } return true } + +func IsTarFile(fPath string) bool { + f, err := os.Open(fPath) + if err != nil { + return false + } + defer f.Close() + return IsTarStream(f) +} diff --git a/pkg/util/qemuimg/qemuimg.go b/pkg/util/qemuimg/qemuimg.go index 0c283250bd..b945725187 100644 --- a/pkg/util/qemuimg/qemuimg.go +++ b/pkg/util/qemuimg/qemuimg.go @@ -233,7 +233,7 @@ func (img *SQemuImage) parse() error { if img.Format == qemuimgfmt.RAW && fileutils2.IsFile(img.Path) && fileutils2.IsIsoFile(img.Path) { img.Format = qemuimgfmt.ISO } - if img.Format == qemuimgfmt.RAW && fileutils2.IsFile(img.Path) && fileutils2.IsTarGzipFile(img.Path) { + if img.Format == qemuimgfmt.RAW && fileutils2.IsFile(img.Path) && (fileutils2.IsTarGzipFile(img.Path) || fileutils2.IsTarFile(img.Path)) { img.Format = imageapi.IMAGE_DISK_FORMAT_TGZ } return nil