|
17 | 17 | from cvss.exceptions import CVSS3MalformedError |
18 | 18 | from cvss.exceptions import CVSS4MalformedError |
19 | 19 | from packageurl import PackageURL |
20 | | -from univers.version_constraint import VersionConstraint |
| 20 | +from univers.version_constraint import VersionConstraint, validate_comparators |
21 | 21 | from univers.version_range import RANGE_CLASS_BY_SCHEMES |
22 | 22 | from univers.versions import InvalidVersion |
23 | 23 | from univers.versions import SemverVersion |
@@ -152,36 +152,41 @@ def parse_advisory_data_v3( |
152 | 152 | or fixed_by_commit_patches |
153 | 153 | or introduced_by_commit_patches |
154 | 154 | ): |
155 | | - affected_packages.append( |
156 | | - AffectedPackageV2( |
157 | | - package=purl, |
158 | | - affected_version_range=affected_version_range, |
159 | | - fixed_version_range=fixed_version_range, |
160 | | - fixed_by_commit_patches=fixed_by_commit_patches, |
161 | | - introduced_by_commit_patches=introduced_by_commit_patches, |
| 155 | + try: |
| 156 | + affected_packages.append( |
| 157 | + AffectedPackageV2( |
| 158 | + package=purl, |
| 159 | + affected_version_range=affected_version_range, |
| 160 | + fixed_version_range=fixed_version_range, |
| 161 | + fixed_by_commit_patches=fixed_by_commit_patches, |
| 162 | + introduced_by_commit_patches=introduced_by_commit_patches, |
| 163 | + ) |
162 | 164 | ) |
163 | | - ) |
| 165 | + except Exception as e: |
| 166 | + logger.error(f"Invalid AffectedPackageV2 {e} for {advisory_id}") |
164 | 167 |
|
165 | 168 | database_specific = raw_data.get("database_specific") or {} |
166 | 169 | cwe_ids = database_specific.get("cwe_ids") or [] |
167 | 170 | weaknesses = list(map(get_cwe_id, cwe_ids)) |
168 | 171 |
|
169 | 172 | if advisory_id in aliases: |
170 | 173 | aliases.remove(advisory_id) |
171 | | - |
172 | | - return AdvisoryData( |
173 | | - advisory_id=advisory_id, |
174 | | - aliases=aliases, |
175 | | - summary=summary, |
176 | | - references_v2=references, |
177 | | - severities=severities, |
178 | | - affected_packages=affected_packages, |
179 | | - date_published=date_published, |
180 | | - weaknesses=weaknesses, |
181 | | - patches=patches, |
182 | | - url=advisory_url, |
183 | | - original_advisory_text=advisory_text or json.dumps(raw_data, indent=2, ensure_ascii=False), |
184 | | - ) |
| 174 | + try: |
| 175 | + return AdvisoryData( |
| 176 | + advisory_id=advisory_id, |
| 177 | + aliases=aliases, |
| 178 | + summary=summary, |
| 179 | + references_v2=references, |
| 180 | + severities=severities, |
| 181 | + affected_packages=affected_packages, |
| 182 | + date_published=date_published, |
| 183 | + weaknesses=weaknesses, |
| 184 | + patches=patches, |
| 185 | + url=advisory_url, |
| 186 | + original_advisory_text=advisory_text or json.dumps(raw_data, indent=2, ensure_ascii=False), |
| 187 | + ) |
| 188 | + except Exception as e: |
| 189 | + logger.error(f"Invalid AdvisoryData for {advisory_id}: {e}") |
185 | 190 |
|
186 | 191 |
|
187 | 192 | def extract_events(range_data) -> Iterable[str]: |
@@ -335,12 +340,18 @@ def get_explicit_affected_constraints(affected_pkg, raw_id, supported_ecosystem) |
335 | 340 | version_obj = version_range_class.version_class(version) |
336 | 341 | constraint = VersionConstraint(comparator="=", version=version_obj) |
337 | 342 | constraints.append(constraint) |
| 343 | + validate_comparators(constraints) |
338 | 344 | except Exception as e: |
339 | 345 | logger.error( |
340 | | - f"Invalid VersionRange for affected_pkg: {affected_pkg} " |
341 | | - f"for OSV id: {raw_id!r}: error:{e!r}" |
| 346 | + f"Invalid VersionConstraint: {version} " f"for OSV id: {raw_id!r}: error:{e!r}" |
342 | 347 | ) |
343 | 348 |
|
| 349 | + try: |
| 350 | + validate_comparators(constraints) |
| 351 | + except Exception as e: |
| 352 | + logger.error( |
| 353 | + f"InvalidConstraint: {version} " f"for OSV id: {raw_id!r}: error:{e!r}" |
| 354 | + ) |
344 | 355 | return constraints |
345 | 356 |
|
346 | 357 |
|
|
0 commit comments