diff --git a/syft/file/cataloger/executable/cataloger.go b/syft/file/cataloger/executable/cataloger.go index 301b31ba4e4..e75eb813f45 100644 --- a/syft/file/cataloger/executable/cataloger.go +++ b/syft/file/cataloger/executable/cataloger.go @@ -66,7 +66,15 @@ func (i *Cataloger) Catalog(resolver file.Resolver) (map[file.Coordinates]file.E log.WithFields("error", err).Warnf("unable to get file contents for %q", loc.RealPath) continue } - exec, err := processExecutable(loc, reader.(unionreader.UnionReader)) + + uReader, err := unionreader.GetUnionReader(reader) + if err != nil { + // TODO: known-unknowns + log.WithFields("error", err).Warnf("unable to get union reader for %q", loc.RealPath) + continue + } + + exec, err := processExecutable(loc, uReader) if err != nil { log.WithFields("error", err).Warnf("unable to process executable %q", loc.RealPath) } diff --git a/syft/internal/unionreader/union_reader.go b/syft/internal/unionreader/union_reader.go index 2e75463044a..86a493ad091 100644 --- a/syft/internal/unionreader/union_reader.go +++ b/syft/internal/unionreader/union_reader.go @@ -9,7 +9,7 @@ import ( "github.com/anchore/syft/internal/log" ) -// unionReader is a single interface with all reading functions needed by multi-arch binary catalogers +// UnionReader is a single interface with all reading functions needed by multi-arch binary catalogers // cataloger. type UnionReader interface { io.Reader @@ -18,7 +18,7 @@ type UnionReader interface { io.Closer } -// getReaders extracts one or more io.ReaderAt objects representing binaries that can be processed (multiple binaries in the case for multi-architecture binaries). +// GetReaders extracts one or more io.ReaderAt objects representing binaries that can be processed (multiple binaries in the case for multi-architecture binaries). func GetReaders(f UnionReader) ([]io.ReaderAt, error) { if macho.IsUniversalMachoBinary(f) { machoReaders, err := macho.ExtractReaders(f)