Skip to content

Commit 9a7e7b6

Browse files
committed
Migrate projectkbmsr2019 importer
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 40a3974 commit 9a7e7b6

6 files changed

Lines changed: 19699 additions & 129 deletions

File tree

vulnerabilities/importers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from vulnerabilities.importers import nvd
1919
from vulnerabilities.importers import openssl
2020
from vulnerabilities.importers import postgresql
21+
from vulnerabilities.importers import project_kb_msr2019
2122
from vulnerabilities.importers import pypa
2223
from vulnerabilities.importers import pysec
2324
from vulnerabilities.importers import redhat
@@ -41,6 +42,7 @@
4142
debian_oval.DebianOvalImporter,
4243
npm.NpmImporter,
4344
retiredotnet.RetireDotnetImporter,
45+
project_kb_msr2019.ProjectKBMSRImporter,
4446
]
4547

4648
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
@@ -34,7 +34,6 @@ def no_rmtree(monkeypatch):
3434
"test_istio.py",
3535
"test_models.py",
3636
"test_mozilla.py",
37-
"test_msr2019.py",
3837
"test_package_managers.py",
3938
"test_ruby.py",
4039
"test_rust.py",

0 commit comments

Comments
 (0)