Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: allow valid cyclonedx input with no components #1873

Merged
merged 3 commits into from
Jul 11, 2023

Conversation

jneate
Copy link
Contributor

@jneate jneate commented Jun 11, 2023

This resolves anchore/grype#1005

The cyclonedx-go library returns Nil when presented with:

<components></components>

But returns an empty slice when presented with:

"components": []

The fix is to check if the format is XML, then inspect the XMLNS field and for other formats inspect the Components field

Signed-off-by: James Neate <jamesmneate@gmail.com>
Signed-off-by: James Neate <jamesmneate@gmail.com>
Comment on lines 29 to 36
if format == cyclonedx.BOMFileFormatXML {
if (!strings.Contains(bom.XMLNS, cycloneDXXmlSchema) || cyclonedx.BOM{} == *bom) {
return fmt.Errorf("not a valid CycloneDX document")
}
} else {
if (bom.Components == nil || cyclonedx.BOM{} == *bom) {
return fmt.Errorf("not a valid CycloneDX document")
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having nested if statements like this duplicates some of the logic and makes things a little harder to reason about. What about a change like this?

Suggested change
if format == cyclonedx.BOMFileFormatXML {
if (!strings.Contains(bom.XMLNS, cycloneDXXmlSchema) || cyclonedx.BOM{} == *bom) {
return fmt.Errorf("not a valid CycloneDX document")
}
} else {
if (bom.Components == nil || cyclonedx.BOM{} == *bom) {
return fmt.Errorf("not a valid CycloneDX document")
}
xmlWithoutNS := format == cyclonedx.BOMFileFormatXML && !strings.Contains(bom.XMLNS, cycloneDXXmlSchema)
if cyclonedx.BOM{} == *bom || bom.Components == nil || xmlWithoutNS {
return fmt.Errorf("not a valid CycloneDX document")
}

@spiffcs spiffcs self-assigned this Jul 11, 2023
Signed-off-by: Christopher Phillips <christopher.phillips@anchore.com>
@spiffcs spiffcs merged commit 5a7c200 into anchore:main Jul 11, 2023
9 checks passed
GijsCalis pushed a commit to GijsCalis/syft that referenced this pull request Feb 19, 2024
fix: allow valid cyclonedx input with no components
---------

Signed-off-by: James Neate <jamesmneate@gmail.com>
Signed-off-by: Christopher Phillips <christopher.phillips@anchore.com>
Co-authored-by: Christopher Phillips <christopher.phillips@anchore.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Failed to detect format of CycloneDX XML SBOM with no components
3 participants