warn on errors from RPM DB parsing (#1200)

Signed-off-by: Alex Goodman <alex.goodman@anchore.com>

Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
Alex Goodman 2022-09-09 14:59:42 -04:00 committed by GitHub
parent 999994f197
commit c5dca001e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -46,28 +46,21 @@ func parseRpmDB(resolver source.FilePathResolver, dbLocation source.Location, re
var allPkgs []pkg.Package var allPkgs []pkg.Package
for _, entry := range pkgList { for _, entry := range pkgList {
p, err := newPkg(resolver, dbLocation, entry) p := newPkg(resolver, dbLocation, entry)
if err != nil {
return nil, err
}
if !pkg.IsValid(p) { if !pkg.IsValid(&p) {
log.Warnf("ignoring invalid package found in RPM DB: location=%q name=%q version=%q", dbLocation, entry.Name, entry.Version)
continue continue
} }
p.SetID() p.SetID()
allPkgs = append(allPkgs, *p) allPkgs = append(allPkgs, p)
} }
return allPkgs, nil return allPkgs, nil
} }
func newPkg(resolver source.FilePathResolver, dbLocation source.Location, entry *rpmdb.PackageInfo) (*pkg.Package, error) { func newPkg(resolver source.FilePathResolver, dbLocation source.Location, entry *rpmdb.PackageInfo) pkg.Package {
fileRecords, err := extractRpmdbFileRecords(resolver, entry)
if err != nil {
return nil, err
}
metadata := pkg.RpmMetadata{ metadata := pkg.RpmMetadata{
Name: entry.Name, Name: entry.Name,
Version: entry.Version, Version: entry.Version,
@ -79,7 +72,7 @@ func newPkg(resolver source.FilePathResolver, dbLocation source.Location, entry
License: entry.License, License: entry.License,
Size: entry.Size, Size: entry.Size,
ModularityLabel: entry.Modularitylabel, ModularityLabel: entry.Modularitylabel,
Files: fileRecords, Files: extractRpmdbFileRecords(resolver, entry),
} }
p := pkg.Package{ p := pkg.Package{
@ -97,7 +90,7 @@ func newPkg(resolver source.FilePathResolver, dbLocation source.Location, entry
} }
p.SetID() p.SetID()
return &p, nil return p
} }
// The RPM naming scheme is [name]-[version]-[release]-[arch], where version is implicitly expands to [epoch]:[version]. // The RPM naming scheme is [name]-[version]-[release]-[arch], where version is implicitly expands to [epoch]:[version].
@ -113,12 +106,13 @@ func toELVersion(metadata pkg.RpmMetadata) string {
return fmt.Sprintf("%s-%s", metadata.Version, metadata.Release) return fmt.Sprintf("%s-%s", metadata.Version, metadata.Release)
} }
func extractRpmdbFileRecords(resolver source.FilePathResolver, entry *rpmdb.PackageInfo) ([]pkg.RpmdbFileRecord, error) { func extractRpmdbFileRecords(resolver source.FilePathResolver, entry *rpmdb.PackageInfo) []pkg.RpmdbFileRecord {
var records = make([]pkg.RpmdbFileRecord, 0) var records = make([]pkg.RpmdbFileRecord, 0)
files, err := entry.InstalledFiles() files, err := entry.InstalledFiles()
if err != nil { if err != nil {
return nil, err log.Warnf("unable to parse listing of installed files for RPM DB entry: %s", err.Error())
return records
} }
for _, record := range files { for _, record := range files {
@ -138,5 +132,5 @@ func extractRpmdbFileRecords(resolver source.FilePathResolver, entry *rpmdb.Pack
}) })
} }
} }
return records, nil return records
} }