77# See https://aboutcode.org for more information about nexB OSS projects.
88#
99from aboutcode .pipeline import LoopProgress
10+ from django .db .models import Prefetch
11+ from django .db .models import Q
1012
13+ from vulnerabilities .models import AdvisorySeverity
1114from vulnerabilities .models import AdvisoryV2
1215from vulnerabilities .models import PackageV2
1316from vulnerabilities .pipelines import VulnerableCodePipeline
@@ -35,7 +38,15 @@ def steps(cls):
3538 def compute_and_store_vulnerability_risk_score (self ):
3639 affected_advisories = (
3740 AdvisoryV2 .objects .filter (impacted_packages__affecting_packages__isnull = False )
38- .prefetch_related ("references" , "severities" , "exploits" )
41+ .prefetch_related (
42+ "references" ,
43+ "severities" ,
44+ "exploits" ,
45+ Prefetch (
46+ "related_advisory_severities" ,
47+ queryset = AdvisoryV2 .objects .prefetch_related ("severities" ),
48+ ),
49+ )
3950 .distinct ()
4051 )
4152
@@ -50,10 +61,13 @@ def compute_and_store_vulnerability_risk_score(self):
5061 batch_size = 5000
5162
5263 for advisory in progress .iter (affected_advisories .iterator (chunk_size = batch_size )):
53- severities = advisory .severities .all ()
5464 references = advisory .references .all ()
5565 exploits = advisory .exploits .all ()
5666
67+ severities = AdvisorySeverity .objects .filter (
68+ Q (advisories = advisory ) | Q (advisories__related_to_advisory_severities = advisory )
69+ ).distinct ()
70+
5771 weighted_severity , exploitability = compute_vulnerability_risk_factors (
5872 references = references ,
5973 severities = severities ,
0 commit comments