3030from dateutil import parser as dateparser
3131from django .db .models .query import QuerySet
3232from packageurl import PackageURL
33+ from univers .version_range import RANGE_CLASS_BY_SCHEMES
3334from univers .version_range import build_range_from_github_advisory_constraint
3435
3536from vulnerabilities import severity_systems
153154 severity
154155 publishedAt
155156 }
157+ firstPatchedVersion{
158+ identifier
159+ }
156160 package {
157161 name
158162 }
@@ -236,7 +240,6 @@ def process_response(resp: dict, package_type: str) -> Iterable[AdvisoryData]:
236240 return
237241
238242 for vulnerability in vulnerabilities :
239- affected_packages = []
240243 aliases = set ()
241244 github_advisory = get_item (vulnerability , "node" )
242245 if not github_advisory :
@@ -249,28 +252,29 @@ def process_response(resp: dict, package_type: str) -> Iterable[AdvisoryData]:
249252 continue
250253
251254 purl = get_purl (pkg_type = package_type , github_name = name )
252- if not purl :
253- continue
254-
255255 vulnerable_range = get_item (github_advisory , "vulnerableVersionRange" )
256- if not vulnerable_range :
257- logger .error (f"No affected range found in { github_advisory !r} " )
258- continue
259-
256+ fixed_version = get_item (github_advisory , "firstPatchedVersion" , "identifier" )
260257 affected_range = None
261258 try :
262259 affected_range = build_range_from_github_advisory_constraint (
263260 package_type , vulnerable_range
264261 )
265- except InvalidVersionRange :
266- logger .error (f"Could not parse affected range { vulnerable_range !r} " )
267- continue
268-
269- if affected_range != NotImplementedError :
262+ except InvalidVersionRange as e :
263+ logger .error (f"Could not parse affected range { vulnerable_range !r} { e !r} " )
264+ affected_range = None
265+ if fixed_version :
266+ try :
267+ RANGE_CLASS_BY_SCHEMES [package_type ].version_class (fixed_version )
268+ except Exception as e :
269+ logger .error (f"Invalid fixed version { fixed_version !r} { e !r} " )
270+ fixed_version = None
271+ affected_packages = []
272+ if purl and (affected_range or fixed_version ):
270273 affected_packages .append (
271274 AffectedPackage (
272275 package = purl ,
273276 affected_version_range = affected_range ,
277+ fixed_version = fixed_version ,
274278 )
275279 )
276280
0 commit comments