diff --git a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java index ef961aac..dccbc42d 100644 --- a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java +++ b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java @@ -138,7 +138,7 @@ Sbom getDependenciesSbom(Path manifestPath, boolean buildTree) throws IOExceptio boolean matchManifestVersions = Environment.getBoolean(Provider.PROP_MATCH_MANIFEST_VERSIONS, false); if (matchManifestVersions) { - String[] goModGraphLines = goModulesResult.split(System.lineSeparator()); + String[] goModGraphLines = goModulesResult.split(Operations.GENERIC_LINE_SEPARATOR); performManifestVersionsCheck(goModGraphLines, manifestPath); } if (!buildTree) { @@ -152,7 +152,7 @@ Sbom getDependenciesSbom(Path manifestPath, boolean buildTree) throws IOExceptio private void performManifestVersionsCheck(String[] goModGraphLines, Path manifestPath) { try { String goModLines = Files.readString(manifestPath); - String[] lines = goModLines.split(System.lineSeparator()); + String[] lines = goModLines.split(Operations.GENERIC_LINE_SEPARATOR); String root = getParentVertex(goModGraphLines[0]); List comparisonLines = Arrays.stream(goModGraphLines) @@ -271,7 +271,8 @@ private Sbom buildSbomFromGraph( // iterate over go mod graph line by line and create map , with each entry to contain module as // a key , and // value of list of that module' dependencies. - List linesList = Arrays.asList(goModulesResult.split(System.lineSeparator())); + List linesList = + Arrays.asList(goModulesResult.split(Operations.GENERIC_LINE_SEPARATOR)); int startingIndex = 0; for (String line : linesList) { @@ -325,7 +326,7 @@ private Map> getFinalPackagesVersionsForModule( String finalVersionsForAllModules = Operations.runProcessGetOutput(manifestPath.getParent(), "go", "list", "-m", "all"); Map finalModulesVersions = - Arrays.stream(finalVersionsForAllModules.split(System.lineSeparator())) + Arrays.stream(finalVersionsForAllModules.split(Operations.GENERIC_LINE_SEPARATOR)) .filter(string -> string.trim().split(" ").length == 2) .collect( Collectors.toMap( @@ -437,7 +438,7 @@ private String buildGoModulesDependencies(Path manifestPath) { } private Sbom buildSbomFromList(String golangDeps, List ignoredDeps) { - String[] allModulesFlat = golangDeps.split(System.lineSeparator()); + String[] allModulesFlat = golangDeps.split(Operations.GENERIC_LINE_SEPARATOR); String parentVertex = getParentVertex(allModulesFlat[0]); PackageURL root = toPurl(parentVertex, "@", this.goEnvironmentVariableForPurl); // Get only direct dependencies of root package/module, and that's it. diff --git a/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java b/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java index cf4d32f7..ef5df5d6 100644 --- a/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java +++ b/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java @@ -20,6 +20,7 @@ import com.github.packageurl.PackageURL; import com.redhat.exhort.providers.javascript.model.Manifest; import com.redhat.exhort.sbom.Sbom; +import com.redhat.exhort.tools.Operations; import java.nio.file.Path; import java.util.Map; import java.util.TreeMap; @@ -36,6 +37,7 @@ public YarnBerryProcessor(String packageManager, Manifest manifest) { super(packageManager, manifest); } + @Override public String[] installCmd(Path manifestDir) { if (manifestDir != null) { return new String[] { @@ -89,7 +91,9 @@ private boolean isRoot(String name) { @Override public String parseDepTreeOutput(String output) { - return "[" + output.trim().replace(System.lineSeparator(), "").replace("}{", "},{") + "]"; + return "[" + + output.trim().replaceAll(Operations.GENERIC_LINE_SEPARATOR, "").replace("}{", "},{") + + "]"; } private PackageURL purlFromNode(String normalizedLocator, JsonNode node) { diff --git a/src/main/java/com/redhat/exhort/tools/Operations.java b/src/main/java/com/redhat/exhort/tools/Operations.java index 23629b64..21327f0d 100644 --- a/src/main/java/com/redhat/exhort/tools/Operations.java +++ b/src/main/java/com/redhat/exhort/tools/Operations.java @@ -35,6 +35,9 @@ /** Utility class used for executing process on the operating system. * */ public final class Operations { + // Some package providers might return Unix output in Windows, so we need to use a generic line + // separator + public static final String GENERIC_LINE_SEPARATOR = "\\r?\\n"; private static final Logger log = LoggersFactory.getLogger(Operations.class.getName()); private Operations() {