Skip to content

Commit 3ee1601

Browse files
committed
handle scan results with empty packages #1888
do not serialize packages without name or version Signed-off-by: Alexander Gschrei <alexander.gschrei@fau.de>
1 parent 513c5c8 commit 3ee1601

2 files changed

Lines changed: 26 additions & 13 deletions

File tree

src/formattedcode/output_cyclonedx.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -438,18 +438,24 @@ def generate_component_list(packages) -> List[CycloneDxComponent]:
438438
licenses = get_licenses(package)
439439
author = get_author_from_parties(package.get("parties"))
440440
purl = package.get("purl")
441-
component = CycloneDxComponent(
442-
name=package.get("name"), version=package.get("version"),
443-
group=package.get("namespace"), purl=purl,
444-
author=author, copyright=package.get("copyright"),
445-
description=package.get("description"),
446-
hashes=hashes, licenses=licenses, externalReferences=refs,
447-
bom_ref=purl)
448-
if purl not in ref_component_map.keys():
449-
components.append(component)
450-
ref_component_map[purl] = component
451-
else:
452-
merge_components(ref_component_map[purl], component)
441+
442+
name = package.get("name")
443+
version = package.get("version")
444+
#if we don't have at least the required name and version we skip the component
445+
if name is not None and version is not None:
446+
component = CycloneDxComponent(
447+
name=package.get("name"), version=package.get("version"),
448+
group=package.get("namespace"), purl=purl,
449+
author=author, copyright=package.get("copyright"),
450+
description=package.get("description"),
451+
hashes=hashes, licenses=licenses, externalReferences=refs,
452+
bom_ref=purl)
453+
454+
if purl not in ref_component_map.keys():
455+
components.append(component)
456+
ref_component_map[purl] = component
457+
else:
458+
merge_components(ref_component_map[purl], component)
453459

454460
return components
455461

@@ -612,7 +618,13 @@ def _build_components_element(self, bom: ET.Element) -> ET.Element:
612618
return bom
613619

614620
def _build_dependencies_element(self, bom: ET.Element) -> ET.Element:
621+
dependencies = self.bom.dependencies
622+
# exit early
623+
if dependencies is None:
624+
return bom
625+
615626
deps = ET.SubElement(bom, "dependencies")
627+
616628
for dependency in self.bom.dependencies:
617629
if dependency.ref is None:
618630
continue

tests/formattedcode/test_output_cyclonedx.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ def test_can_encode_component():
4444
'"hashes": [{"alg": "MD5", "content": "not-a-hash"}], ' \
4545
'"licenses": [{"expression": "MIT or Apache-2.0"}, ' \
4646
'{"license": {"id": "MIT"}}], ' \
47-
'"type": "library", "bom-ref": "pkg:generic/test@1"}'
47+
'"type": "library", "scope": "required", ' \
48+
'"bom-ref": "pkg:generic/test@1"}'
4849
assert json_repr == expected_json_repr
4950

5051

0 commit comments

Comments
 (0)