Skip to content

Commit 2b393d8

Browse files
committed
Add gitlab importer and use NginxVersion instead of SemverVersion in Nginx importer and improver
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 9548943 commit 2b393d8

7 files changed

Lines changed: 80 additions & 16 deletions

File tree

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ toml==0.10.2
107107
tomli==2.0.1
108108
traitlets==5.1.1
109109
typing_extensions==4.1.1
110-
univers==30.6.0
110+
univers==30.7.0
111111
urllib3==1.26.9
112112
wcwidth==0.2.5
113113
websocket-client==0.59.0

vulnerabilities/importers/gitlab.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
from fetchcode.vcs import fetch_via_vcs
3636
from packageurl import PackageURL
3737
from univers.version_range import RANGE_CLASS_BY_SCHEMES
38-
from univers.version_range import GitLabVersionRange
3938
from univers.version_range import VersionRange
39+
from univers.version_range import from_gitlab_native
4040
from univers.versions import Version
4141

4242
from vulnerabilities.helpers import AffectedPackage as LegacyAffectedPackage
@@ -58,7 +58,7 @@
5858
logger = logging.getLogger(__name__)
5959

6060

61-
PURL_TYPE_BY_ECOSYSTEM = {
61+
PURL_TYPE_BY_GITLAB_SCHEME = {
6262
"gem": "gem",
6363
"go": "golang",
6464
"maven": "maven",
@@ -69,6 +69,9 @@
6969
}
7070

7171

72+
GITLAB_SCHEME_BY_PURL_TYPE = {v: k for k, v in PURL_TYPE_BY_GITLAB_SCHEME.items()}
73+
74+
7275
def fork_and_get_dir(url):
7376
return fetch_via_vcs(url).dest_dir
7477

@@ -113,22 +116,23 @@ def get_purl(package_slug):
113116
"""
114117
parts = package_slug.split("/")
115118
parts = list(filter(not_empty, parts))
116-
type = parts[0]
117-
if type == "go":
119+
gitlab_scheme = parts[0]
120+
purl_type = PURL_TYPE_BY_GITLAB_SCHEME[gitlab_scheme]
121+
if gitlab_scheme == "go":
118122
name = "/".join(parts[1:])
119-
return PackageURL(type=PURL_TYPE_BY_ECOSYSTEM[type], namespace=None, name=name)
123+
return PackageURL(type=purl_type, namespace=None, name=name)
120124
# if package slug is of the form:
121125
# "nuget/NuGet.Core"
122126
if len(parts) == 2:
123127
name = parts[1]
124-
return PackageURL(type=PURL_TYPE_BY_ECOSYSTEM[type], name=name)
128+
return PackageURL(type=purl_type, name=name)
125129
# if package slug is of the form:
126130
# "nuget/github/user/abc/NuGet.Core"
127131
if len(parts) >= 3:
128-
type = parts[0]
132+
gitlab_scheme = parts[0]
129133
name = parts[-1]
130134
namespace = "/".join(parts[1:-1])
131-
return PackageURL(type=PURL_TYPE_BY_ECOSYSTEM[type], namespace=namespace, name=name)
135+
return PackageURL(type=purl_type, namespace=namespace, name=name)
132136
logger.error(f"get_purl: package_slug can not be parsed: {package_slug!r}")
133137
return None
134138

@@ -177,11 +181,12 @@ def parse_yaml_file(file):
177181
)
178182
vrc: VersionRange = RANGE_CLASS_BY_SCHEMES[purl.type]
179183
version_class = vrc.version_class
180-
gitlab_native_schemes = ["pypi", "gem", "npm"]
184+
gitlab_native_schemes = ["pypi", "gem", "npm", "go", "packagist"]
185+
gitlab_scheme = GITLAB_SCHEME_BY_PURL_TYPE[purl.type]
181186
try:
182-
if purl.type in gitlab_native_schemes:
187+
if gitlab_scheme in gitlab_native_schemes:
183188
affected_version_range = (
184-
GitLabVersionRange.from_gitlab_native(purl.type, affected_range)
189+
from_gitlab_native(gitlab_scheme=gitlab_scheme, string=affected_range)
185190
if affected_range
186191
else None
187192
)

vulnerabilities/package_managers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ def cleaned_version(version):
384384
"""
385385
Return a ``version`` string stripped from leading "v" prefix.
386386
"""
387-
return (version.lstrip("vV"),)
387+
return version.lstrip("vV")
388388

389389

390390
class ComposerVersionAPI(VersionAPI):

vulnerabilities/tests/test_data/gitlab/composer-expected.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,20 @@
33
"GMS-2018-26"
44
],
55
"summary": "Incorrect header injection check",
6-
"affected_packages": [],
6+
"affected_packages": [
7+
{
8+
"package": {
9+
"type": "composer",
10+
"namespace": "amphp",
11+
"name": "http",
12+
"version": null,
13+
"qualifiers": null,
14+
"subpath": null
15+
},
16+
"affected_version_range": "vers:composer/<1.0.1",
17+
"fixed_version": "1.0.1"
18+
}
19+
],
720
"references": [
821
{
922
"reference_id": "",

vulnerabilities/tests/test_data/gitlab/composer-improver-expected.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,14 @@
77
"confidence": 100,
88
"summary": "Incorrect header injection check",
99
"affected_purls": [],
10-
"fixed_purl": null,
10+
"fixed_purl": {
11+
"type": "composer",
12+
"namespace": "amphp",
13+
"name": "http",
14+
"version": "1.0.1",
15+
"qualifiers": null,
16+
"subpath": null
17+
},
1118
"references": [
1219
{
1320
"reference_id": "",

vulnerabilities/tests/test_data/gitlab/golang-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"qualifiers": null,
1515
"subpath": null
1616
},
17-
"affected_version_range": null,
17+
"affected_version_range": "vers:golang/<3.7.1",
1818
"fixed_version": "3.7.1"
1919
}
2020
],

vulnerabilities/tests/test_data/gitlab/golang-improver-expected.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,43 @@
11
[
2+
{
3+
"vulnerability_id": null,
4+
"aliases": [
5+
"GHSA-x5c7-x7m2-rhmf",
6+
"GMS-2021-107"
7+
],
8+
"confidence": 100,
9+
"summary": "Local directory executable lookup in sops (Windows-only)",
10+
"affected_purls": [
11+
{
12+
"type": "golang",
13+
"namespace": null,
14+
"name": "go.mozilla.org/sops/v3",
15+
"version": "3.7.0",
16+
"qualifiers": null,
17+
"subpath": null
18+
}
19+
],
20+
"fixed_purl": {
21+
"type": "golang",
22+
"namespace": null,
23+
"name": "go.mozilla.org/sops/v3",
24+
"version": "3.7.1",
25+
"qualifiers": null,
26+
"subpath": null
27+
},
28+
"references": [
29+
{
30+
"reference_id": "GHSA-x5c7-x7m2-rhmf",
31+
"url": "https://github.com/mozilla/sops/security/advisories/GHSA-x5c7-x7m2-rhmf",
32+
"severities": []
33+
},
34+
{
35+
"reference_id": "GHSA-x5c7-x7m2-rhmf",
36+
"url": "https://github.com/advisories/GHSA-x5c7-x7m2-rhmf",
37+
"severities": []
38+
}
39+
]
40+
},
241
{
342
"vulnerability_id": null,
443
"aliases": [

0 commit comments

Comments
 (0)