github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/vm/disk/disk.go (about) 1 package disk 2 3 import ( 4 "errors" 5 "io" 6 7 "golang.org/x/xerrors" 8 9 "github.com/devseccon/trivy/pkg/fanal/vm" 10 ) 11 12 var ( 13 vmDisks = []Disk{ 14 VMDK{}, 15 } 16 ) 17 18 // Disk defines virtual machine disk images like VMDK, VDI and VHD. 19 type Disk interface { 20 NewReader(io.ReadSeeker, vm.Cache[string, []byte]) (*io.SectionReader, error) 21 } 22 23 func New(rs io.ReadSeeker, cache vm.Cache[string, []byte]) (*io.SectionReader, error) { 24 25 for _, vmdisk := range vmDisks { 26 var vreader, err = vmdisk.NewReader(rs, cache) 27 if err != nil { 28 if errors.Is(err, vm.ErrInvalidSignature) { 29 continue 30 } 31 return nil, xerrors.Errorf("open virtual machine error: %w", err) 32 } 33 34 return vreader, nil 35 } 36 return nil, xerrors.New("virtual machine can not be detected") 37 }