(yaml_path)
| 33 | |
| 34 | |
| 35 | def yaml_file_to_advisory(yaml_path): |
| 36 | impacted_packages = [] |
| 37 | resolved_packages = [] |
| 38 | references = [] |
| 39 | |
| 40 | data = load_yaml(yaml_path) |
| 41 | vuln_id = data["vulnerability_id"] |
| 42 | summary = "" |
| 43 | if data.get("text"): |
| 44 | summary = "\n".join([note["text"] for note in data["notes"]]) |
| 45 | |
| 46 | for entry in data.get("artifacts", []): |
| 47 | package = PackageURL.from_string(entry["id"]) |
| 48 | if entry["affected"]: |
| 49 | impacted_packages.append(package) |
| 50 | else: |
| 51 | resolved_packages.append(package) |
| 52 | |
| 53 | for fix in data.get("fixes", []): |
| 54 | for commit in fix["commits"]: |
| 55 | references.append(Reference(url=f"{commit['repository']}/{commit['id']}")) |
| 56 | |
| 57 | return AdvisoryData( |
| 58 | vulnerability_id=vuln_id, |
| 59 | summary=summary, |
| 60 | affected_packages=nearest_patched_package(impacted_packages, resolved_packages), |
| 61 | references=references, |
| 62 | ) |
no test coverage detected