Skip to content

Commit 748103e

Browse files
committed
Improve package type inference in github importer
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 9cb2107 commit 748103e

1 file changed

Lines changed: 25 additions & 18 deletions

File tree

vulnerabilities/importers/github.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ def __init__(self, *args, **kwargs):
9797
except KeyError:
9898
raise GitHubTokenError("Environment variable GH_TOKEN is missing")
9999

100+
self.ecosytem_type = {
101+
"RUBYGEMS": "gem",
102+
"NUGET": "nuget",
103+
"PIP": "pypi",
104+
"MAVEN": "maven",
105+
"COMPOSER": "composer",
106+
}
107+
100108
def __enter__(self):
101109
self.advisories = self.fetch()
102110

@@ -135,7 +143,7 @@ def set_version_api(self, ecosystem: str) -> None:
135143
"NUGET": NugetVersionAPI,
136144
"COMPOSER": ComposerVersionAPI,
137145
"PIP": PypiVersionAPI,
138-
"RUBYGEMS": RubyVersionAPI
146+
"RUBYGEMS": RubyVersionAPI,
139147
}
140148
versioner = versioners.get(ecosystem)
141149
if versioner:
@@ -150,7 +158,7 @@ def process_name(ecosystem: str, pkg_name: str) -> Optional[Tuple[Optional[str],
150158
return
151159
ns, name = artifact_comps
152160
return ns, name
153-
161+
154162
if ecosystem == "COMPOSER":
155163
vendor, name = pkg_name.split("/")
156164
return vendor, name
@@ -169,7 +177,7 @@ def process_response(self) -> List[Advisory]:
169177
adv_list = []
170178
for ecosystem in self.advisories:
171179
self.set_version_api(ecosystem)
172-
pkg_type = ecosystem.lower()
180+
pkg_type = self.ecosytem_type[ecosystem]
173181
for resp_page in self.advisories[ecosystem]:
174182
for adv in resp_page["data"]["securityVulnerabilities"]["edges"]:
175183
name = adv["node"]["package"]["name"]
@@ -181,21 +189,18 @@ def process_response(self) -> List[Advisory]:
181189
aff_range, self.version_api.get(name)
182190
)
183191
affected_purls = {
184-
PackageURL(name=pkg_name, namespace=ns,
185-
version=version, type=pkg_type)
192+
PackageURL(name=pkg_name, namespace=ns, version=version, type=pkg_type)
186193
for version in aff_vers
187194
}
188195

189196
unaffected_purls = {
190-
PackageURL(name=pkg_name, namespace=ns,
191-
version=version, type=pkg_type)
197+
PackageURL(name=pkg_name, namespace=ns, version=version, type=pkg_type)
192198
for version in unaff_vers
193199
}
194-
else :
200+
else:
195201
affected_purls = set()
196202
unaffected_purls = set()
197203

198-
199204
cve_ids = set()
200205
vuln_references = []
201206
vuln_desc = adv["node"]["advisory"]["summary"]
@@ -205,12 +210,13 @@ def process_response(self) -> List[Advisory]:
205210
cve_ids.add(vuln["value"])
206211

207212
elif vuln["type"] == "GHSA":
208-
ghsa = vuln['value']
209-
vuln_references.append(Reference(
210-
reference_id=ghsa,
211-
url="https://github.com/advisories/{}".format(
212-
ghsa)
213-
))
213+
ghsa = vuln["value"]
214+
vuln_references.append(
215+
Reference(
216+
reference_id=ghsa,
217+
url="https://github.com/advisories/{}".format(ghsa),
218+
)
219+
)
214220

215221
for cve_id in cve_ids:
216222
adv_list.append(
@@ -225,8 +231,9 @@ def process_response(self) -> List[Advisory]:
225231
return adv_list
226232

227233
@staticmethod
228-
def categorize_versions(version_range: str, all_versions: Set[str]) -> Tuple[Set[str], Set[str]]: # nopep8
234+
def categorize_versions(
235+
version_range: str, all_versions: Set[str]
236+
) -> Tuple[Set[str], Set[str]]: # nopep8
229237
version_range = RangeSpecifier(version_range)
230-
affected_versions = {
231-
version for version in all_versions if version in version_range}
238+
affected_versions = {version for version in all_versions if version in version_range}
232239
return (affected_versions, all_versions - affected_versions)

0 commit comments

Comments
 (0)