Skip to content

Commit 2427aab

Browse files
bug: ensure only valid JSON files processed
1 parent 25c4e8b commit 2427aab

File tree

2 files changed

+41
-35
lines changed

2 files changed

+41
-35
lines changed

sbomdiff/cyclonedx_parser.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,25 @@ def parse_cyclonedx_json(self, sbom_file):
2323
"""parses CycloneDX JSON BOM file extracting package name, version and license"""
2424
data = json.load(open(sbom_file))
2525
packages = {}
26-
for d in data["components"]:
27-
if d["type"] in ["library", "application", "operating-system"]:
28-
package = d["name"]
29-
version = d["version"]
30-
license = "NOT FOUND"
31-
# Multiple ways of defining license data
32-
if "licenses" in d and len(d["licenses"]) > 0:
33-
license_data = d["licenses"][0]
34-
if "license" in license_data:
35-
if "id" in license_data["license"]:
36-
license = license_data["license"]["id"]
37-
elif "name" in license_data["license"]:
38-
license = license_data["license"]["name"]
39-
elif "expression" in license_data:
40-
license = license_data["expression"]
41-
if package not in packages:
42-
packages[package] = [version, license]
26+
# Check that valid CycloneDX JSON file is being processed
27+
if "components" in data:
28+
for d in data["components"]:
29+
if d["type"] in ["library", "application", "operating-system"]:
30+
package = d["name"]
31+
version = d["version"]
32+
license = "NOT FOUND"
33+
# Multiple ways of defining license data
34+
if "licenses" in d and len(d["licenses"]) > 0:
35+
license_data = d["licenses"][0]
36+
if "license" in license_data:
37+
if "id" in license_data["license"]:
38+
license = license_data["license"]["id"]
39+
elif "name" in license_data["license"]:
40+
license = license_data["license"]["name"]
41+
elif "expression" in license_data:
42+
license = license_data["expression"]
43+
if package not in packages:
44+
packages[package] = [version, license]
4345

4446
return packages
4547

sbomdiff/spdx_parser.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,17 @@ def parse_spdx_json(self, sbom_file):
5555
"""parses SPDX JSON BOM file extracting package name, version and license"""
5656
data = json.load(open(sbom_file))
5757
packages = {}
58-
for d in data["packages"]:
59-
package = d["name"]
60-
try:
61-
version = d["versionInfo"]
62-
license = d["licenseConcluded"]
63-
if package not in packages:
64-
packages[package] = [version, license]
65-
except KeyError as e:
66-
pass
58+
# Check that valid SPDX JSON file is being processed
59+
if "packages" in data:
60+
for d in data["packages"]:
61+
package = d["name"]
62+
try:
63+
version = d["versionInfo"]
64+
license = d["licenseConcluded"]
65+
if package not in packages:
66+
packages[package] = [version, license]
67+
except KeyError as e:
68+
pass
6769

6870
return packages
6971

@@ -128,15 +130,17 @@ def parse_spdx_yaml(self, sbom_file):
128130
data = yaml.safe_load(open(sbom_file))
129131

130132
packages = {}
131-
for d in data["packages"]:
132-
package = d["name"]
133-
try:
134-
version = d["versionInfo"]
135-
license = d["licenseConcluded"]
136-
if package not in packages:
137-
packages[package] = [version, license]
138-
except KeyError as e:
139-
pass
133+
# Check that valid SPDX YAML file is being processed
134+
if "packages" in data:
135+
for d in data["packages"]:
136+
package = d["name"]
137+
try:
138+
version = d["versionInfo"]
139+
license = d["licenseConcluded"]
140+
if package not in packages:
141+
packages[package] = [version, license]
142+
except KeyError as e:
143+
pass
140144

141145
return packages
142146

0 commit comments

Comments
 (0)