Skip to content

Commit 254cb96

Browse files
committed
🐛 Fix safetydb and disable it by default (license issue)
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 114a970 commit 254cb96

3 files changed

Lines changed: 24 additions & 16 deletions

File tree

vulnerabilities/importer_yielder.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@
5656
"debian_tracker_url": "https://security-tracker.debian.org/tracker/data/json"
5757
},
5858
},
59-
{
60-
"name": "safetydb",
61-
"license": "cc-by-nc-4.0",
62-
"last_run": None,
63-
"data_source": "SafetyDbDataSource",
64-
"data_source_cfg": {
65-
"url": "https://raw.githubusercontent.com/pyupio/safety-db/master/data/insecure_full.json", # nopep8
66-
"etags": {},
67-
},
68-
},
59+
# {
60+
# "name": "safetydb",
61+
# "license": "cc-by-nc-4.0",
62+
# "last_run": None,
63+
# "data_source": "SafetyDbDataSource",
64+
# "data_source_cfg": {
65+
# "url": "https://raw.githubusercontent.com/pyupio/safety-db/master/data/insecure_full.json",
66+
# "etags": {},
67+
# },
68+
# },
6969
{
7070
"name": "npm",
7171
"license": "mit",

vulnerabilities/importers/safety_db.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import requests
3737
from univers.version_specifier import VersionSpecifier
3838
from univers.versions import PYPIVersion
39+
from univers.versions import InvalidVersion
3940
from packageurl import PackageURL
4041
from schema import Or
4142
from schema import Regex
@@ -97,8 +98,6 @@ def collect_packages(self):
9798
return {pkg for pkg in self._api_response}
9899

99100
def updated_advisories(self) -> Set[Advisory]:
100-
advisories = []
101-
102101
for package_name in self._api_response:
103102
if package_name == "$meta" or package_name == "cumin":
104103
# This is the first entry in the data feed. It contains metadata of the feed.
@@ -129,7 +128,7 @@ def updated_advisories(self) -> Set[Advisory]:
129128
)
130129

131130
reference = [Reference(reference_id=advisory["id"])]
132-
131+
advisories = []
133132
for cve_id in cve_ids:
134133
advisories.append(
135134
Advisory(
@@ -142,7 +141,7 @@ def updated_advisories(self) -> Set[Advisory]:
142141
)
143142
)
144143

145-
return advisories
144+
yield advisories
146145

147146
# FIXME: This is duplicate code. Use the the helper instead.
148147
def create_etag(self, url):
@@ -172,10 +171,12 @@ def categorize_versions(
172171
for version_spec in version_specs:
173172
vurl_specs.append(VersionSpecifier.from_scheme_version_spec_string("pypi", version_spec))
174173

174+
invalid_versions = set()
175175
for version in all_versions:
176176
try:
177177
version_object = PYPIVersion(version)
178-
except:
178+
except InvalidVersion:
179+
invalid_versions.add(version)
179180
continue
180181

181182
if any([version_object in vurl_spec for vurl_spec in vurl_specs]):
@@ -189,6 +190,7 @@ def categorize_versions(
189190
)
190191

191192
resolved_purls = []
193+
all_versions -= invalid_versions
192194
for version in all_versions - impacted_versions:
193195
resolved_purls.append(PackageURL(name=package_name, type="pypi", version=version))
194196
return impacted_purls, resolved_purls

vulnerabilities/tests/test_safety_db.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,14 @@ def test_import(self):
154154
),
155155
]
156156

157-
found_data = [adv for adv in data_src.updated_advisories()]
157+
found_data = []
158+
# FIXME: This is messed up
159+
for adv_batch in data_src.updated_advisories():
160+
found_data.extend(adv_batch)
161+
# found_data = [list(adv) for adv in data_src.updated_advisories()]
158162

163+
print(expected_data)
164+
print("\n", found_data)
159165
assert expected_data == found_data
160166

161167

0 commit comments

Comments
 (0)