Skip components with no matching primary in hierarchical merge - #338
Open
arpitjain099 wants to merge 1 commit into
Open
Skip components with no matching primary in hierarchical merge#338arpitjain099 wants to merge 1 commit into
arpitjain099 wants to merge 1 commit into
Conversation
buildPrimaryComponentList only records a primary for a BOM that has metadata.component, so merging BOMs without one leaves the list empty while the loop still indexed priCompList[newPc] with newPc defaulting to 0. That panicked with index out of range on an all-orphan merge, and with a mix of BOMs it silently nested the orphan components under an unrelated primary. Signed-off-by: Arpit Jain <arpitjain099@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
metadata.componentis optional in CycloneDX, andbuildPrimaryComponentListonly records a primary for BOMs that have one. The hierarchical branch ofcombinedMergethen does this:newPcstays 0 when nothing matches, andpriCompList[newPc]is indexed unconditionally. Two effects:metadata.componentleavespriCompListempty, so this panics withindex out of range [0] with length 0Hierarchical merge is the default (
config.gosetsHierarchicalMerge: true), so plainsbomasm assembleover component-only SBOMs hits it.The existing
log.Error("hierarchical merge: old product does not have any component.")fires just before, but it only substitutes an emptyoldPcand execution continues into the index.This tracks whether the lookup actually matched and skips that BOM contribution with an error log when it did not, rather than defaulting to entry 0.
Test merges two component-only SBOMs through the real
combinedMerge. It panics on main with the error above and passes with the change.go test ./pkg/assemble/...is green.