Skip to content

Commit 31a5cab

Browse files
soul2zimateclaude
andcommitted
fix: address review comments on SBOM dedup check and null-safety
1. CycloneDXSbom.checkIfPackageInsideDependsOnList: the stream result was never assigned back to allDirectDeps, so the check always returned false. Also changed getName() comparison to use full namespace/name to handle scoped packages (e.g. @babel/core). 2. JavaScriptProvider.addDependenciesFromKey: added null check for version node before calling asText(), matching the defensive pattern already used in addDependenciesOf. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent fd3bc30 commit 31a5cab

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

src/main/java/io/github/guacsec/trustifyda/providers/JavaScriptProvider.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@ private void addDependenciesFromKey(Sbom sbom, JsonNode depTree, String key) {
177177
deps.fields()
178178
.forEachRemaining(
179179
e -> {
180-
var version = e.getValue().get("version").asText();
181-
var target = toPurl(e.getKey(), version);
180+
JsonNode versionNode = e.getValue().get("version");
181+
if (versionNode == null || versionNode.isNull()) {
182+
return; // skip entries without a resolved version
183+
}
184+
var target = toPurl(e.getKey(), versionNode.asText());
182185
sbom.addDependency(manifest.root, target, null);
183186
addDependenciesOf(sbom, target, e.getValue());
184187
});

src/main/java/io/github/guacsec/trustifyda/sbom/CycloneDXSbom.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -337,18 +337,28 @@ public boolean checkIfPackageInsideDependsOnList(PackageURL component, String na
337337
List<Dependency> deps = targetComponent.getDependencies();
338338
List<PackageURL> allDirectDeps = Collections.emptyList();
339339
if (deps != null) {
340-
deps.stream()
341-
.map(
342-
dep -> {
343-
try {
344-
return new PackageURL(dep.getRef());
345-
} catch (MalformedPackageURLException e) {
346-
throw new RuntimeException(e);
347-
}
348-
})
349-
.collect(Collectors.toList());
340+
allDirectDeps =
341+
deps.stream()
342+
.map(
343+
dep -> {
344+
try {
345+
return new PackageURL(dep.getRef());
346+
} catch (MalformedPackageURLException e) {
347+
throw new RuntimeException(e);
348+
}
349+
})
350+
.collect(Collectors.toList());
350351
}
351-
result = allDirectDeps.stream().anyMatch(dep -> dep.getName().equals(name));
352+
result =
353+
allDirectDeps.stream()
354+
.anyMatch(
355+
dep -> {
356+
var fullName =
357+
dep.getNamespace() != null
358+
? dep.getNamespace() + "/" + dep.getName()
359+
: dep.getName();
360+
return fullName.equals(name);
361+
});
352362
}
353363
return result;
354364
}

0 commit comments

Comments
 (0)