2020from univers .versions import GentooVersion
2121from univers .versions import InvalidVersion
2222
23- from vulnerabilities .importer import AdvisoryData
23+ from vulnerabilities .importer import AdvisoryDataV2
2424from vulnerabilities .importer import AffectedPackageV2
2525from vulnerabilities .importer import ReferenceV2
2626from vulnerabilities .importer import VulnerabilitySeverity
@@ -53,7 +53,7 @@ def advisories_count(self):
5353 advisory_dir = Path (self .vcs_response .dest_dir )
5454 return sum (1 for _ in advisory_dir .rglob ("*.xml" ))
5555
56- def collect_advisories (self ) -> Iterable [AdvisoryData ]:
56+ def collect_advisories (self ) -> Iterable [AdvisoryDataV2 ]:
5757 base_path = Path (self .vcs_response .dest_dir )
5858 for file_path in base_path .glob ("**/*.xml" ):
5959 yield from self .process_file (file_path )
@@ -105,11 +105,11 @@ def process_file(self, file):
105105 if severity_value :
106106 severities .append (VulnerabilitySeverity (system = GENERIC , value = severity_value ))
107107
108- yield AdvisoryData (
108+ yield AdvisoryDataV2 (
109109 advisory_id = glsa ,
110110 aliases = cves ,
111111 summary = summary ,
112- references_v2 = vuln_references ,
112+ references = vuln_references ,
113113 severities = severities ,
114114 affected_packages = affected_packages ,
115115 url = f"https://security.gentoo.org/glsa/{ id } " ,
@@ -176,9 +176,9 @@ def get_affected_and_fixed_purls(affected_elem, logger):
176176 "ge" : ">=" ,
177177 "le" : "<=" ,
178178 "eq" : "=" ,
179- # "rle": "<=",
180- # "rge": ">=",
181- # "rgt": ">",
179+ "rle" : "<=" ,
180+ "rge" : ">=" ,
181+ "rgt" : ">" ,
182182 }
183183 comparator = comparator_dict .get (range_value )
184184 if not comparator :
@@ -195,6 +195,13 @@ def get_affected_and_fixed_purls(affected_elem, logger):
195195 (comparator , info .text )
196196 )
197197
198+ if range_value in ["rgt" , "rge" , "rle" ]:
199+ next_minor_version = GentooVersion (info .text ).bump ()
200+ invert_comp = "<" if range_value in ["rgt" , "rge" ] else ">"
201+ purl_ranges_map [(pkg_name , pkg_ns , slot_value )]["fixed_ranges" ].add (
202+ (invert_comp , next_minor_version )
203+ )
204+
198205 for (pkg_name , pkg_ns , slot_value ), data in purl_ranges_map .items ():
199206 qualifiers = {"slot" : slot_value } if slot_value else {}
200207 purl = PackageURL (type = "ebuild" , name = pkg_name , namespace = pkg_ns , qualifiers = qualifiers )
0 commit comments