| 50 | |
| 51 | |
| 52 | def to_advisories(data): |
| 53 | advisories = [] |
| 54 | soup = BeautifulSoup(data, features="lxml") |
| 55 | table = soup.select("table")[0] |
| 56 | for row in table.select("tbody tr"): |
| 57 | ref_col, affected_col, fixed_col, severity_score_col, desc_col = row.select("td") |
| 58 | summary = desc_col.text |
| 59 | pkg_qualifiers = {} |
| 60 | if "windows" in summary.lower(): |
| 61 | pkg_qualifiers = {"os": "windows"} |
| 62 | |
| 63 | affected_packages = [] |
| 64 | affected_version_list = affected_col.text.split(",") |
| 65 | fixed_version_list = fixed_col.text.split(",") |
| 66 | |
| 67 | if fixed_version_list: |
| 68 | for fixed_version in fixed_version_list: |
| 69 | affected_packages.append( |
| 70 | AffectedPackage( |
| 71 | package=PackageURL( |
| 72 | name="postgresql", |
| 73 | # TODO: See https://github.com/nexB/vulnerablecode/issues/990 |
| 74 | type="generic", |
| 75 | qualifiers=pkg_qualifiers, |
| 76 | ), |
| 77 | affected_version_range=( |
| 78 | GenericVersionRange.from_versions(affected_version_list) |
| 79 | if affected_version_list |
| 80 | else None |
| 81 | ), |
| 82 | fixed_version=GenericVersion(fixed_version) if fixed_version else None, |
| 83 | ) |
| 84 | ) |
| 85 | elif affected_version_list: |
| 86 | affected_packages.append( |
| 87 | AffectedPackage( |
| 88 | package=PackageURL( |
| 89 | name="postgresql", |
| 90 | # TODO: See https://github.com/nexB/vulnerablecode/issues/990 |
| 91 | type="generic", |
| 92 | qualifiers=pkg_qualifiers, |
| 93 | ), |
| 94 | affected_version_range=GenericVersionRange.from_versions(affected_version_list), |
| 95 | ) |
| 96 | ) |
| 97 | cve_id = "" |
| 98 | try: |
| 99 | cve_id = ref_col.select(".nobr")[0].text |
| 100 | # This is for the anomaly in https://www.postgresql.org/support/security/8.1/ 's |
| 101 | # last entry |
| 102 | except IndexError: |
| 103 | pass |
| 104 | |
| 105 | references = [] |
| 106 | vector_link_tag = severity_score_col.find("a") |
| 107 | for a_tag in ref_col.select("a"): |
| 108 | link = a_tag.attrs["href"] |
| 109 | if link.startswith("/"): |