Skip to content

Commit d07eabe

Browse files
committed
Add firstPatchedVersion in github API
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 6ec2e9e commit d07eabe

14 files changed

Lines changed: 59 additions & 38 deletions

File tree

vulnerabilities/importers/github.py

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from dateutil import parser as dateparser
3131
from django.db.models.query import QuerySet
3232
from packageurl import PackageURL
33+
from univers.version_range import RANGE_CLASS_BY_SCHEMES
3334
from univers.version_range import build_range_from_github_advisory_constraint
3435

3536
from vulnerabilities import severity_systems
@@ -153,6 +154,9 @@
153154
severity
154155
publishedAt
155156
}
157+
firstPatchedVersion{
158+
identifier
159+
}
156160
package {
157161
name
158162
}
@@ -236,43 +240,42 @@ def process_response(resp: dict, package_type: str) -> Iterable[AdvisoryData]:
236240
return
237241

238242
for vulnerability in vulnerabilities:
239-
affected_packages = []
240243
aliases = set()
241244
github_advisory = get_item(vulnerability, "node")
242245
if not github_advisory:
243246
logger.error(f"No node found in {vulnerability!r}")
244247
continue
245-
246248
name = get_item(github_advisory, "package", "name")
247-
if not name:
248-
logger.error(f"No name found in {github_advisory!r}")
249-
continue
250-
251-
purl = get_purl(pkg_type=package_type, github_name=name)
252-
if not purl:
253-
continue
254-
255-
vulnerable_range = get_item(github_advisory, "vulnerableVersionRange")
256-
if not vulnerable_range:
257-
logger.error(f"No affected range found in {github_advisory!r}")
258-
continue
259-
260-
affected_range = None
261-
try:
262-
affected_range = build_range_from_github_advisory_constraint(
263-
package_type, vulnerable_range
264-
)
265-
except InvalidVersionRange:
266-
logger.error(f"Could not parse affected range {vulnerable_range!r}")
267-
continue
268-
269-
if affected_range != NotImplementedError:
270-
affected_packages.append(
271-
AffectedPackage(
272-
package=purl,
273-
affected_version_range=affected_range,
249+
if name:
250+
purl = get_purl(pkg_type=package_type, github_name=name)
251+
if purl:
252+
affected_range = get_item(github_advisory, "vulnerableVersionRange")
253+
fixed_version = get_item(github_advisory, "firstPatchedVersion", "identifier")
254+
if affected_range:
255+
try:
256+
affected_range = build_range_from_github_advisory_constraint(
257+
package_type, affected_range
258+
)
259+
except InvalidVersionRange as e:
260+
logger.error(f"Could not parse affected range {affected_range!r} {e!r}")
261+
affected_range = None
262+
if fixed_version:
263+
try:
264+
fixed_version = RANGE_CLASS_BY_SCHEMES[package_type].version_class(
265+
fixed_version
266+
)
267+
except Exception as e:
268+
logger.error(f"Invalid fixed version {fixed_version!r} {e!r}")
269+
fixed_version = None
270+
affected_packages = []
271+
if affected_range or fixed_version:
272+
affected_packages.append(
273+
AffectedPackage(
274+
package=purl,
275+
affected_version_range=affected_range,
276+
fixed_version=fixed_version,
277+
)
274278
)
275-
)
276279

277280
advisory = get_item(github_advisory, "advisory")
278281
if not advisory:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
"subpath": null
164164
},
165165
"affected_version_range": "vers:composer/<22.1.0",
166-
"fixed_version": null
166+
"fixed_version": "22.1.0"
167167
}
168168
],
169169
"references": [

vulnerabilities/tests/test_data/github_api/composer.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@
150150
"package": {
151151
"name": "librenms/librenms"
152152
},
153+
"firstPatchedVersion": {
154+
"identifier" :"22.1.0"
155+
},
153156
"vulnerableVersionRange": "< 22.1.0"
154157
}
155158
}

vulnerabilities/tests/test_data/github_api/gem-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"subpath": null
1717
},
1818
"affected_version_range": "vers:gem/<=1.3.1",
19-
"fixed_version": null
19+
"fixed_version": "1.3.2"
2020
}
2121
],
2222
"references": [

vulnerabilities/tests/test_data/github_api/gem.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@
5757
"package": {
5858
"name": "webrick"
5959
},
60+
"firstPatchedVersion": {
61+
"identifier" :"1.3.2"
62+
},
6063
"vulnerableVersionRange": "<= 1.3.1"
6164
}
6265
},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"subpath": null
1717
},
1818
"affected_version_range": "vers:golang/<1.3.3",
19-
"fixed_version": null
19+
"fixed_version": "1.3.3"
2020
}
2121
],
2222
"references": [

vulnerabilities/tests/test_data/github_api/golang.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
"package": {
4646
"name": "github.com/moby/moby"
4747
},
48+
"firstPatchedVersion": {
49+
"identifier" :"1.3.3"
50+
},
4851
"vulnerableVersionRange": "< 1.3.3"
4952
}
5053
},

vulnerabilities/tests/test_data/github_api/maven-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@
152152
"subpath": null
153153
},
154154
"affected_version_range": "vers:maven/>=9.0.0|<9.0.31",
155-
"fixed_version": null
155+
"fixed_version": "9.0.1"
156156
}
157157
],
158158
"references": [

vulnerabilities/tests/test_data/github_api/maven.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@
139139
"package": {
140140
"name": "org.apache.tomcat.embed:tomcat-embed-core"
141141
},
142+
"firstPatchedVersion": {
143+
"identifier" :"9.0.1"
144+
},
142145
"vulnerableVersionRange": ">= 9.0.0, < 9.0.31"
143146
}
144147
}

vulnerabilities/tests/test_data/github_api/nuget-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"subpath": null
1717
},
1818
"affected_version_range": "vers:nuget/<=4.5.1-alpha001",
19-
"fixed_version": null
19+
"fixed_version": "4.5.1"
2020
}
2121
],
2222
"references": [

0 commit comments

Comments
 (0)