1212from typing import Iterable
1313
1414from packageurl import PackageURL
15- from univers .version_range import RANGE_CLASS_BY_SCHEMES
15+ from univers .version_constraint import VersionConstraint
16+ from univers .version_range import RpmVersionRange
17+ from univers .versions import RpmVersion
1618
1719from vulnerabilities .importer import AdvisoryDataV2
1820from vulnerabilities .importer import AffectedPackageV2
1921from vulnerabilities .importer import VulnerabilitySeverity
2022from vulnerabilities .pipelines import VulnerableCodeBaseImporterPipelineV2
21- from vulnerabilities .severity_systems import CVSSV3
23+ from vulnerabilities .severity_systems import GENERIC
2224from vulnerabilities .utils import fetch_response
2325
2426
@@ -62,7 +64,9 @@ def fetch(self):
6264 self .log (f"Fetching `{ url } `" )
6365 response = fetch_response (url )
6466 if response :
65- self .records .extend (response .json ())
67+ for record in response .json ():
68+ record ["source_url" ] = url
69+ self .records .append (record )
6670 self .log (f"Fetched { len (self .records ):,d} total records from { len (photon_files )} sources" )
6771
6872 def group_records_by_cve (self ):
@@ -91,8 +95,6 @@ def advisories_count(self) -> int:
9195 return len (self .cve_to_records )
9296
9397 def collect_advisories (self ) -> Iterable [AdvisoryDataV2 ]:
94- rpm_range_cls = RANGE_CLASS_BY_SCHEMES ["rpm" ]
95-
9698 for cve_id , records in self .cve_to_records .items ():
9799 affected_packages = []
98100
@@ -110,12 +112,17 @@ def collect_advisories(self) -> Iterable[AdvisoryDataV2]:
110112 )
111113
112114 ver_match = re .match (r"all versions before (.+) are vulnerable" , aff_ver )
113- if ver_match :
114- affected_version_range = rpm_range_cls .from_string (
115- f"vers:{ rpm_range_cls .scheme } /<{ ver_match .group (1 )} "
116- )
117115
118- fixed_version_range = rpm_range_cls .from_versions ([res_ver ])
116+ affected_version_range = RpmVersionRange (
117+ constraints = [
118+ VersionConstraint (
119+ comparator = "<" ,
120+ version = RpmVersion (ver_match .group (1 )),
121+ )
122+ ]
123+ )
124+
125+ fixed_version_range = RpmVersionRange .from_versions ([res_ver ])
119126
120127 affected_packages .append (
121128 AffectedPackageV2 (
@@ -129,16 +136,15 @@ def collect_advisories(self) -> Iterable[AdvisoryDataV2]:
129136 cve_score = records [0 ].get ("cve_score" )
130137 severities .append (
131138 VulnerabilitySeverity (
132- system = CVSSV3 ,
139+ system = GENERIC ,
133140 value = str (cve_score ),
134- scoring_elements = "" ,
135141 )
136142 )
137143
138144 yield AdvisoryDataV2 (
139145 advisory_id = cve_id ,
140146 affected_packages = affected_packages ,
141147 severities = severities ,
142- url = f"https://nvd.nist.gov/vuln/detail/ { cve_id } " ,
148+ url = records [ 0 ]. get ( "source_url" , self . repo_url ) ,
143149 original_advisory_text = json .dumps (records , indent = 2 , ensure_ascii = False ),
144150 )
0 commit comments