Skip to content

Commit 7b14928

Browse files
authored
fix(yarn): avoid error on yarn berry audit when no vulnerability found (#7501)
1 parent 7492649 commit 7b14928

File tree

14 files changed

+1001
-3
lines changed

14 files changed

+1001
-3
lines changed

core/src/main/java/org/owasp/dependencycheck/analyzer/YarnAuditAnalyzer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.ArrayList;
5555
import java.util.Arrays;
5656
import java.util.List;
57+
import java.util.stream.Stream;
5758

5859
@ThreadSafe
5960
public class YarnAuditAnalyzer extends AbstractNpmAnalyzer {
@@ -388,7 +389,9 @@ private List<JSONObject> fetchYarnAdvisories(Dependency dependency, boolean skip
388389
final String advisoriesJsons = startAndReadStdoutToString(builder);
389390

390391
LOGGER.debug("Advisories JSON: {}", advisoriesJsons);
391-
String[] advisoriesJsonArray = advisoriesJsons.split("\n");
392+
String[] advisoriesJsonArray = Stream.of(advisoriesJsons.split("\n"))
393+
.filter(s -> !s.isBlank())
394+
.toArray(String[]::new);
392395
try {
393396
List<JSONObject> advisories = new ArrayList<>();
394397
for (String advisoriesJson : advisoriesJsonArray) {

core/src/test/java/org/owasp/dependencycheck/analyzer/YarnAuditAnalyzerIT.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,29 @@ public class YarnAuditAnalyzerIT extends BaseTest {
3333

3434
@Test
3535
public void testAnalyzePackageYarnClassic() throws AnalysisException, InitializationException, InvalidSettingException {
36-
testAnalyzePackageYarn("yarn-classic-audit/yarn.lock");
36+
testAnalyzePackageYarn("yarn/yarn-classic-audit/yarn.lock");
3737
}
3838

3939
@Test
4040
public void testAnalyzePackageYarnBerry() throws AnalysisException, InitializationException, InvalidSettingException {
41-
testAnalyzePackageYarn("yarn-berry-audit/yarn.lock");
41+
testAnalyzePackageYarn("yarn/yarn-berry-audit/yarn.lock");
42+
}
43+
44+
@Test
45+
public void testAnalyzePackageYarnBerryNoVulnerability() throws AnalysisException, InitializationException, InvalidSettingException {
46+
//Assume.assumeThat(getSettings().getBoolean(Settings.KEYS.ANALYZER_YARN_AUDIT_ENABLED), is(true));
47+
try (Engine engine = new Engine(getSettings())) {
48+
var analyzer = new YarnAuditAnalyzer();
49+
analyzer.setFilesMatched(true);
50+
analyzer.initialize(getSettings());
51+
analyzer.prepare(engine);
52+
final Dependency toScan = new Dependency(BaseTest.getResourceAsFile(this, "yarn/yarn-berry-audit-no-vulnerability/yarn.lock"));
53+
analyzer.analyze(toScan, engine);
54+
assertTrue("No dependency should be identified", engine.getDependencies().length == 0);
55+
} catch (InitializationException ex) {
56+
//yarn is not installed - skip the test case.
57+
Assume.assumeNoException(ex);
58+
}
4259
}
4360

4461
private void testAnalyzePackageYarn(String yarnLockFile) throws AnalysisException {
Binary file not shown.

core/src/test/resources/yarn-berry-audit/.yarn/releases/yarn-4.6.0.cjs renamed to core/src/test/resources/yarn/yarn-berry-audit-no-vulnerability/.yarn/releases/yarn-4.6.0.cjs

File renamed without changes.

core/src/test/resources/yarn-berry-audit/.yarnrc.yml renamed to core/src/test/resources/yarn/yarn-berry-audit-no-vulnerability/.yarnrc.yml

File renamed without changes.

core/src/test/resources/yarn/yarn-berry-audit-no-vulnerability/node_modules/.yarn-state.yml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "owasp-nodejs-goat",
3+
"private": true,
4+
"version": "1.3.0",
5+
"description": "A tool to learn OWASP Top 10 for node.js developers",
6+
"main": "server.js",
7+
"comments": {
8+
"//": "a9 insecure components"
9+
},
10+
"scripts": {
11+
"start": "node server.js",
12+
"test": "node node_modules/grunt-cli/bin/grunt test",
13+
"db:seed": "grunt db-reset",
14+
"precommit": "grunt precommit"
15+
},
16+
"repository": "https://github.com/OWASP/NodejsGoat",
17+
"license": "Apache 2.0",
18+
"packageManager": "[email protected]"
19+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# This file is generated by running "yarn install" inside your project.
2+
# Manual changes might be lost - proceed with caution!
3+
4+
__metadata:
5+
version: 8
6+
cacheKey: 10c0
7+
8+
"owasp-nodejs-goat@workspace:.":
9+
version: 0.0.0-use.local
10+
resolution: "owasp-nodejs-goat@workspace:."
11+
languageName: unknown
12+
linkType: soft

core/src/test/resources/yarn/yarn-berry-audit/.yarn/releases/yarn-4.6.0.cjs

Lines changed: 934 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
nodeLinker: node-modules
2+
3+
yarnPath: .yarn/releases/yarn-4.6.0.cjs

0 commit comments

Comments
 (0)