mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
fix(dotnet-deps-cataloger): avoid repeated dependency resolution (#3930)
Signed-off-by: Keith Zantow <kzantow@gmail.com>
This commit is contained in:
parent
18ed8b60f8
commit
7bfb4c86a6
@ -252,8 +252,8 @@ func getLogicalDepsJSON(deps depsJSON, lm *libmanJSON) logicalDepsJSON {
|
|||||||
if !bundlingDetected && knownBundlers.Has(name) {
|
if !bundlingDetected && knownBundlers.Has(name) {
|
||||||
bundlingDetected = true
|
bundlingDetected = true
|
||||||
}
|
}
|
||||||
p.AnyChildClaimsDLLs = searchForDLLClaims(packageMap, p.dependencyNameVersions()...)
|
p.AnyChildClaimsDLLs = searchForDLLClaims(packageMap, strset.New(), p.dependencyNameVersions()...)
|
||||||
p.AnyChildHasDLLs = searchForDLLEvidence(packageMap, p.dependencyNameVersions()...)
|
p.AnyChildHasDLLs = searchForDLLEvidence(packageMap, strset.New(), p.dependencyNameVersions()...)
|
||||||
packages[p.NameVersion] = *p
|
packages[p.NameVersion] = *p
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,31 +286,35 @@ func mergeSets(s1, s2 *strset.Set) *strset.Set {
|
|||||||
type visitorFunc func(p *logicalDepsJSONPackage) bool
|
type visitorFunc func(p *logicalDepsJSONPackage) bool
|
||||||
|
|
||||||
// searchForDLLEvidence recursively searches for executables found for any of the given nameVersions and children recursively.
|
// searchForDLLEvidence recursively searches for executables found for any of the given nameVersions and children recursively.
|
||||||
func searchForDLLEvidence(packageMap map[string]*logicalDepsJSONPackage, nameVersions ...string) bool {
|
func searchForDLLEvidence(packageMap map[string]*logicalDepsJSONPackage, visited *strset.Set, nameVersions ...string) bool {
|
||||||
return traverseDependencies(packageMap, func(p *logicalDepsJSONPackage) bool {
|
return traverseDependencies(packageMap, func(p *logicalDepsJSONPackage) bool {
|
||||||
return p.FoundDLLs(true)
|
return p.FoundDLLs(true)
|
||||||
}, nameVersions...)
|
}, visited, nameVersions...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// searchForDLLClaims recursively searches for DLL claims in the deps.json for any of the given nameVersions and children recursively.
|
// searchForDLLClaims recursively searches for DLL claims in the deps.json for any of the given nameVersions and children recursively.
|
||||||
func searchForDLLClaims(packageMap map[string]*logicalDepsJSONPackage, nameVersions ...string) bool {
|
func searchForDLLClaims(packageMap map[string]*logicalDepsJSONPackage, visited *strset.Set, nameVersions ...string) bool {
|
||||||
return traverseDependencies(packageMap, func(p *logicalDepsJSONPackage) bool {
|
return traverseDependencies(packageMap, func(p *logicalDepsJSONPackage) bool {
|
||||||
return p.ClaimsDLLs(true)
|
return p.ClaimsDLLs(true)
|
||||||
}, nameVersions...)
|
}, visited, nameVersions...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverseDependencies(packageMap map[string]*logicalDepsJSONPackage, visitor visitorFunc, nameVersions ...string) bool {
|
func traverseDependencies(packageMap map[string]*logicalDepsJSONPackage, visitor visitorFunc, visited *strset.Set, nameVersions ...string) bool {
|
||||||
if len(nameVersions) == 0 {
|
if len(nameVersions) == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, nameVersion := range nameVersions {
|
for _, nameVersion := range nameVersions {
|
||||||
|
if visited.Has(nameVersion) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
visited.Add(nameVersion)
|
||||||
if p, ok := packageMap[nameVersion]; ok {
|
if p, ok := packageMap[nameVersion]; ok {
|
||||||
if visitor(p) {
|
if visitor(p) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if traverseDependencies(packageMap, visitor, p.dependencyNameVersions()...) {
|
if traverseDependencies(packageMap, visitor, visited, p.dependencyNameVersions()...) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -149,6 +149,11 @@ func TestGetLogicalDepsJSON_MergeTargets(t *testing.T) {
|
|||||||
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": {},
|
"lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"Microsoft.CodeAnalysis.Common/4.0.0": {
|
||||||
|
Dependencies: map[string]string{
|
||||||
|
"Microsoft.CodeAnalysis.CSharp": "4.0.0",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Libraries: map[string]depsLibrary{
|
Libraries: map[string]depsLibrary{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user