2323import asyncio
2424import os
2525import dataclasses
26- import json
26+ from dateutil import parser as dateparser
2727from typing import Set
2828from typing import Tuple
2929from typing import List
6767 url
6868 }
6969 severity
70+ publishedAt
7071 }
7172 package {
7273 name
@@ -185,7 +186,6 @@ def fetch(self) -> Mapping[str, List[Mapping]]:
185186 end_cursor_exp = ""
186187
187188 while True :
188-
189189 query_json = {"query" : query % (ecosystem , end_cursor_exp )}
190190 resp = requests .post (self .config .endpoint , headers = headers , json = query_json ).json ()
191191 if resp .get ("message" ) == "Bad credentials" :
@@ -260,12 +260,16 @@ def process_response(self) -> List[Advisory]:
260260 for resp_page in self .advisories [ecosystem ]:
261261 for adv in resp_page ["data" ]["securityVulnerabilities" ]["edges" ]:
262262 name = adv ["node" ]["package" ]["name" ]
263-
263+ cutoff_time = dateparser .parse (adv ["node" ]["advisory" ]["publishedAt" ])
264+ affected_purls = []
265+ unaffected_purls = []
264266 if self .process_name (ecosystem , name ):
265267 ns , pkg_name = self .process_name (ecosystem , name )
266268 aff_range = adv ["node" ]["vulnerableVersionRange" ]
267269 aff_vers , unaff_vers = self .categorize_versions (
268- self .version_api .package_type , aff_range , self .version_api .get (name )
270+ self .version_api .package_type ,
271+ aff_range ,
272+ self .version_api .get (name , until = cutoff_time ).valid_versions ,
269273 )
270274 affected_purls = [
271275 PackageURL (name = pkg_name , namespace = ns , version = version , type = pkg_type )
@@ -276,10 +280,6 @@ def process_response(self) -> List[Advisory]:
276280 PackageURL (name = pkg_name , namespace = ns , version = version , type = pkg_type )
277281 for version in unaff_vers
278282 ]
279- else :
280- affected_purls = []
281- unaffected_purls = []
282-
283283 cve_ids = set ()
284284 references = self .extract_references (adv ["node" ]["advisory" ]["references" ])
285285 vuln_desc = adv ["node" ]["advisory" ]["summary" ]
0 commit comments