Skip to content

Commit 698cdc2

Browse files
committed
Migrate projectkbmsr2019 importer
Signed-off-by: Tushar Goel <[email protected]>
1 parent 2903edc commit 698cdc2

File tree

6 files changed

+19699
-129
lines changed

6 files changed

+19699
-129
lines changed

vulnerabilities/importers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from vulnerabilities.importers import nvd
2323
from vulnerabilities.importers import openssl
2424
from vulnerabilities.importers import postgresql
25+
from vulnerabilities.importers import project_kb_msr2019
2526
from vulnerabilities.importers import pypa
2627
from vulnerabilities.importers import pysec
2728
from vulnerabilities.importers import redhat
@@ -49,6 +50,7 @@
4950
mozilla.MozillaImporter,
5051
gentoo.GentooImporter,
5152
istio.IstioImporter,
53+
project_kb_msr2019.ProjectKBMSRImporter,
5254
]
5355

5456
IMPORTERS_REGISTRY = {x.qualified_name: x for x in IMPORTERS_REGISTRY}

vulnerabilities/importers/project_kb_msr2019.py

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from vulnerabilities.importer import AdvisoryData
1414
from vulnerabilities.importer import Importer
1515
from vulnerabilities.importer import Reference
16-
from vulnerabilities.utils import create_etag
1716
from vulnerabilities.utils import is_cve
1817

1918
# Reading CSV file from a url using `requests` is bit too complicated.
@@ -23,42 +22,31 @@
2322
class ProjectKBMSRImporter(Importer):
2423

2524
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"
2627

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)
3231

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):
4233
# Project KB MSR csv file has no header row
43-
advisories = []
4434
for row in csv_reader:
4535
vuln_id, proj_home, fix_commit, _ = row
4636
commit_link = proj_home + "/commit/" + fix_commit
4737

48-
if is_cve(vuln_id):
49-
reference = Reference(url=commit_link)
38+
if not is_cve(vuln_id):
39+
continue
5040

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],
6246
)
6347

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)

vulnerabilities/tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ def no_rmtree(monkeypatch):
3030
"test_api.py",
3131
"test_elixir_security.py",
3232
"test_models.py",
33-
"test_msr2019.py",
3433
"test_package_managers.py",
3534
"test_ruby.py",
3635
"test_rust.py",

0 commit comments

Comments
 (0)