@@ -64,7 +64,9 @@ def parse_advisory_data(raw_data: dict, supported_ecosystem) -> Optional[Advisor
6464 )
6565
6666 for fixed_range in affected_pkg .get ("ranges" ) or []:
67- fixed_version = get_fixed_versions (fixed_range = fixed_range , raw_id = raw_id )
67+ fixed_version = get_fixed_versions (
68+ fixed_range = fixed_range , raw_id = raw_id , supported_ecosystem = supported_ecosystem
69+ )
6870
6971 for version in fixed_version :
7072 affected_packages .append (
@@ -199,18 +201,19 @@ def get_affected_version_range(affected_pkg, raw_id, supported_ecosystem):
199201 )
200202
201203
202- def get_fixed_versions (fixed_range , raw_id ) -> List [Version ]:
204+ def get_fixed_versions (fixed_range , raw_id , supported_ecosystem ) -> List [Version ]:
203205 """
204206 Return a list of unique fixed univers Versions given a ``fixed_range``
205207 univers VersionRange and a ``raw_id``.
206208
207209 For example::
208210
209- >>> get_fixed_versions(fixed_range={}, raw_id="GHSA-j3f7-7rmc-6wqj")
211+ >>> get_fixed_versions(fixed_range={}, raw_id="GHSA-j3f7-7rmc-6wqj", supported_ecosystem="pypi", )
210212 []
211213 >>> get_fixed_versions(
212214 ... fixed_range={"type": "ECOSYSTEM", "events": [{"fixed": "1.7.0"}]},
213- ... raw_id="GHSA-j3f7-7rmc-6wqj"
215+ ... raw_id="GHSA-j3f7-7rmc-6wqj",
216+ ... supported_ecosystem="pypi",
214217 ... )
215218 [PypiVersion(string='1.7.0')]
216219 """
@@ -221,21 +224,32 @@ def get_fixed_versions(fixed_range, raw_id) -> List[Version]:
221224
222225 fixed_range_type = fixed_range ["type" ]
223226
224- for version in extract_fixed_versions (fixed_range ):
227+ version_class = None
228+ try :
229+ version_class = RANGE_CLASS_BY_SCHEMES [supported_ecosystem ].version_class
230+ except KeyError :
231+ logger .error (
232+ f"Unknown version range for ecosystem { supported_ecosystem } for OSV id: { raw_id !r} "
233+ )
225234
226- # FIXME: ECOSYSTEM does not imply PyPI!!!!
235+ for version in extract_fixed_versions ( fixed_range ):
227236 if fixed_range_type == "ECOSYSTEM" :
228237 try :
229- fixed_versions .append (PypiVersion (version ))
238+ if not version_class :
239+ raise InvalidVersion (
240+ f"Unsupported version for ecosystem: { supported_ecosystem } "
241+ )
242+ fixed_versions .append (version_class (version ))
230243 except InvalidVersion :
231- logger .error (f"Invalid PypiVersion: { version !r} for OSV id: { raw_id !r} " )
244+ logger .error (
245+ f"Invalid version class: { version_class } - { version !r} for OSV id: { raw_id !r} "
246+ )
232247
233248 elif fixed_range_type == "SEMVER" :
234249 try :
235250 fixed_versions .append (SemverVersion (version ))
236251 except InvalidVersion :
237252 logger .error (f"Invalid SemverVersion: { version !r} for OSV id: { raw_id !r} " )
238-
239253 else :
240254 logger .error (f"Unsupported fixed version type: { version !r} for OSV id: { raw_id !r} " )
241255
0 commit comments