mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-23 07:29:00 -08:00
35 lines
715 B
Go
35 lines
715 B
Go
package filesystem
|
|
|
|
import (
|
|
"io"
|
|
"io/fs"
|
|
|
|
"github.com/masahiro331/go-ext4-filesystem/ext4"
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/aquasecurity/trivy/pkg/fanal/vm"
|
|
)
|
|
|
|
type EXT4 struct{}
|
|
|
|
func (e EXT4) New(sr io.SectionReader, cache vm.Cache) (fs.FS, error) {
|
|
_, err := sr.Seek(0, io.SeekStart)
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("failed to seek offset error: %w", err)
|
|
}
|
|
ok := ext4.Check(&sr)
|
|
if !ok {
|
|
return nil, ErrInvalidHeader
|
|
}
|
|
|
|
_, err = sr.Seek(0, io.SeekStart)
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("failed to seek offset error: %w", err)
|
|
}
|
|
f, err := ext4.NewFS(sr, cache)
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("new ext4 filesystem error: %w", err)
|
|
}
|
|
return f, nil
|
|
}
|