14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/gem_guard/vulnerability_fetcher.rb', line 14
def fetch_for(dependencies)
spinner = TTY::Spinner.new("[:spinner] Fetching vulnerabilities...", format: :pulse_2)
spinner.auto_spin
vulnerabilities = []
dependencies.each do |dependency|
vulnerabilities.concat(fetch_osv_vulnerabilities(dependency))
vulnerabilities.concat(fetch_ruby_advisory_vulnerabilities(dependency))
vulnerabilities.concat(fetch_ghsa_vulnerabilities(dependency))
vulnerabilities.concat(fetch_nvd_vulnerabilities(dependency))
vulnerabilities.concat(fetch_cu_advisory_vulnerabilities(dependency))
end
deduplicated = {}
vulnerabilities.each do |vuln|
key = [vuln.id, vuln.gem_name]
if deduplicated[key]
existing = deduplicated[key]
merged_affected = (existing.affected_versions + vuln.affected_versions).uniq
merged_fixed = (existing.fixed_versions + vuln.fixed_versions).uniq
deduplicated[key] = Vulnerability.new(
id: existing.id,
gem_name: existing.gem_name,
affected_versions: merged_affected,
fixed_versions: merged_fixed,
severity: existing.severity,
summary: existing.summary,
details: existing.details
)
else
deduplicated[key] = vuln
end
end
spinner.success("Done.")
deduplicated.values
end
|