github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/vm/disk/vmdk.go (about) 1 package disk 2 3 import ( 4 "errors" 5 "io" 6 7 "github.com/masahiro331/go-vmdk-parser/pkg/virtualization/vmdk" 8 "golang.org/x/xerrors" 9 10 "github.com/devseccon/trivy/pkg/fanal/vm" 11 ) 12 13 type VMDK struct{} 14 15 func (VMDK) NewReader(rs io.ReadSeeker, cache vm.Cache[string, []byte]) (*io.SectionReader, error) { 16 if _, err := rs.Seek(0, io.SeekStart); err != nil { 17 return nil, xerrors.Errorf("seek error: %w", err) 18 } 19 20 if _, err := vmdk.Check(rs); err != nil { 21 return nil, vm.ErrInvalidSignature 22 } 23 24 if _, err := rs.Seek(0, io.SeekStart); err != nil { 25 return nil, xerrors.Errorf("seek error: %w", err) 26 } 27 28 reader, err := vmdk.Open(rs, cache) 29 if err != nil { 30 if errors.Is(err, vmdk.ErrUnSupportedType) { 31 return nil, xerrors.Errorf("%s: %w", err.Error(), vm.ErrUnsupportedType) 32 } 33 return nil, xerrors.Errorf("failed to open vmdk: %w", err) 34 } 35 return reader, nil 36 }