|
13 | 13 | from vulnerabilities.importer import AdvisoryData |
14 | 14 | from vulnerabilities.importer import Importer |
15 | 15 | from vulnerabilities.importer import Reference |
16 | | -from vulnerabilities.utils import create_etag |
17 | 16 | from vulnerabilities.utils import is_cve |
18 | 17 |
|
19 | 18 | # Reading CSV file from a url using `requests` is bit too complicated. |
|
23 | 22 | class ProjectKBMSRImporter(Importer): |
24 | 23 |
|
25 | 24 | url = "https://raw.githubusercontent.com/SAP/project-kb/master/MSR2019/dataset/vulas_db_msr2019_release.csv" |
| 25 | + spdx_license_expression = "Apache-2.0" |
| 26 | + license_url = "https://github.com/SAP/project-kb/blob/main/LICENSE.txt" |
26 | 27 |
|
27 | | - def updated_advisories(self): |
28 | | - if create_etag(data_src=self, url=self.url, etag_key="ETag"): |
29 | | - raw_data = self.fetch() |
30 | | - advisories = self.to_advisories(raw_data) |
31 | | - return self.batch_advisories(advisories) |
| 28 | + def advisory_data(self): |
| 29 | + raw_data = fetch_and_read_from_csv(self.url) |
| 30 | + yield from self.to_advisories(raw_data) |
32 | 31 |
|
33 | | - return [] |
34 | | - |
35 | | - def fetch(self): |
36 | | - response = urllib.request.urlopen(self.url) |
37 | | - lines = [l.decode("utf-8") for l in response.readlines()] |
38 | | - return csv.reader(lines) |
39 | | - |
40 | | - @staticmethod |
41 | | - def to_advisories(csv_reader): |
| 32 | + def to_advisories(self, csv_reader): |
42 | 33 | # Project KB MSR csv file has no header row |
43 | | - advisories = [] |
44 | 34 | for row in csv_reader: |
45 | 35 | vuln_id, proj_home, fix_commit, _ = row |
46 | 36 | commit_link = proj_home + "/commit/" + fix_commit |
47 | 37 |
|
48 | | - if is_cve(vuln_id): |
49 | | - reference = Reference(url=commit_link) |
| 38 | + if not is_cve(vuln_id): |
| 39 | + continue |
50 | 40 |
|
51 | | - else: |
52 | | - reference = Reference(url=commit_link, reference_id=vuln_id) |
53 | | - vuln_id = "" |
54 | | - |
55 | | - advisories.append( |
56 | | - AdvisoryData( |
57 | | - summary="", |
58 | | - affected_packages=[], |
59 | | - references=[reference], |
60 | | - vulnerability_id=vuln_id, |
61 | | - ) |
| 41 | + reference = Reference(url=commit_link) |
| 42 | + yield AdvisoryData( |
| 43 | + aliases=[vuln_id], |
| 44 | + summary="", |
| 45 | + references=[reference], |
62 | 46 | ) |
63 | 47 |
|
64 | | - return advisories |
| 48 | + |
| 49 | +def fetch_and_read_from_csv(url): |
| 50 | + response = urllib.request.urlopen(url) |
| 51 | + lines = [l.decode("utf-8") for l in response.readlines()] |
| 52 | + return csv.reader(lines) |
0 commit comments