-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
Describe the bug
Follow-up to #5128, seems not to be fully fixed yet: I receive a NullPointerException from the NodePackageAnalyzer when analyzing a package-lock.json. Exception message does slightly differ from the trace in the linked earlier issue though:
[WARN] An unexpected error occurred during analysis of '/src/package-lock.json' (Node.js Package Analyzer): Cannot invoke "String.isEmpty()" because "string" is null
[ERROR]
java.lang.NullPointerException: Cannot invoke "String.isEmpty()" because "string" is null
at org.semver4j.Range$RangeOperator.value(Range.java:138)
at org.semver4j.RangesListFactory.addRanges(RangesListFactory.java:53)
at org.semver4j.RangesListFactory.create(RangesListFactory.java:26)
at org.semver4j.Semver.satisfies(Semver.java:445)
at org.owasp.dependencycheck.analyzer.DependencyBundlingAnalyzer.npmVersionsMatch(DependencyBundlingAnalyzer.java:628)
at org.owasp.dependencycheck.analyzer.AbstractNpmAnalyzer.findDependency(AbstractNpmAnalyzer.java:296)
at org.owasp.dependencycheck.analyzer.NodePackageAnalyzer.processDependencies(NodePackageAnalyzer.java:454)
at org.owasp.dependencycheck.analyzer.NodePackageAnalyzer.processDependencies(NodePackageAnalyzer.java:402)
at org.owasp.dependencycheck.analyzer.NodePackageAnalyzer.analyzeDependency(NodePackageAnalyzer.java:270)
at org.owasp.dependencycheck.analyzer.AbstractAnalyzer.analyze(AbstractAnalyzer.java:131)
at org.owasp.dependencycheck.AnalysisTask.call(AnalysisTask.java:88)
at org.owasp.dependencycheck.AnalysisTask.call(AnalysisTask.java:37)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Version of dependency-check used
latest main as of writing -> e84cb80 (run via the CLI within a container, using the included Dockerfile)
To Reproduce
Adding a few quick debug logs in DependencyBundlingAnalyzer shows that in my current/specific case npmVersionsMatch is invoked with arguments current = "^14.14.20 || ^16.0.0" and next = "18.11.5", which seems to originate from the following snippet in the package-lock.json:
"@storybook/angular": {
"version": "6.5.13",
// ...
"requires": {
// ...
"@types/node": "^14.14.20 || ^16.0.0",Similar to jeremylong/DependencyCheck#5128 (comment), this seems to be sufficient to trigger the NPE:
Semver semver = new Semver("18.11.5");
System.out.println(semver.satisfies("^14.14.20 || ^16.0.0"));Note
Based on the comment in the code I'm not sure if the check in https://github.com/jeremylong/DependencyCheck/blob/e84cb804aa1510bd50515ad600fec2034decabd6/core/src/main/java/org/owasp/dependencycheck/analyzer/DependencyBundlingAnalyzer.java#L616-L617 should be also preventing this, if so it doesn't catch this specific parameter combination as the next version doesn't include a space.