@cyclonedx/cdxgen 11.2.4 → 11.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cdxgen.js CHANGED
@@ -214,6 +214,10 @@ const args = yargs(hideBin(process.argv))
214
214
  default: "semantics.slices.json",
215
215
  hidden: true,
216
216
  })
217
+ .option("openapi-spec-file", {
218
+ description: "Path for the openapi specification file (SaaSBOM).",
219
+ hidden: true,
220
+ })
217
221
  .option("spec-version", {
218
222
  description: "CycloneDX Specification version to use. Defaults to 1.6",
219
223
  default: 1.6,
@@ -989,6 +993,7 @@ const checkPermissions = (filePath, options) => {
989
993
  dataFlowSlicesFile: options.dataFlowSlicesFile,
990
994
  reachablesSlicesFile: options.reachablesSlicesFile,
991
995
  semanticsSlicesFile: options.semanticsSlicesFile,
996
+ openapiSpecFile: options.openapiSpecFile,
992
997
  includeCrypto: options.includeCrypto,
993
998
  specVersion: options.specVersion,
994
999
  profile: options.profile,
@@ -0,0 +1,5 @@
1
+ gradle.taskGraph.whenReady {
2
+ gradle.includedBuilds.each { includedBuild ->
3
+ println "<CDXGEN:includedBuild>:${includedBuild.name}"
4
+ }
5
+ }
package/lib/cli/index.js CHANGED
@@ -33,8 +33,6 @@ import {
33
33
  listFiles,
34
34
  } from "../helpers/envcontext.js";
35
35
  import { thoughtLog } from "../helpers/logger.js";
36
-
37
- import { analyzeBuildSettings } from "../helpers/package_specific/gradleutils.js";
38
36
  import {
39
37
  CARGO_CMD,
40
38
  CLJ_CMD,
@@ -226,6 +224,14 @@ if (process.env.GRADLE_USER_HOME) {
226
224
  );
227
225
  }
228
226
 
227
+ // Construct path to gradle init script
228
+ const GRADLE_INIT_SCRIPT = resolve(
229
+ dirNameStr,
230
+ "data",
231
+ "helpers",
232
+ "init.gradle",
233
+ );
234
+
229
235
  // Construct sbt cache directory
230
236
  const SBT_CACHE_DIR =
231
237
  process.env.SBT_CACHE_DIR || join(homedir(), ".ivy2", "cache");
@@ -1959,59 +1965,50 @@ export async function createJavaBom(path, options) {
1959
1965
  options,
1960
1966
  )
1961
1967
  ) {
1962
- let rootProjects = [null];
1963
1968
  let allProjectsStr = [];
1964
- let rootGradleModule = {};
1965
- let includedProjectsFound = false;
1966
1969
  if (process.env.GRADLE_INCLUDED_BUILDS) {
1967
1970
  // Automatically add the colon prefix
1968
- const includedBuilds = process.env.GRADLE_INCLUDED_BUILDS.split(",").map(
1969
- (b) => (!b.startsWith(":") ? `:${b}` : b),
1971
+ allProjectsStr = process.env.GRADLE_INCLUDED_BUILDS.split(",").map((b) =>
1972
+ !b.startsWith(":") ? `:${b}` : b,
1970
1973
  );
1971
- rootProjects = rootProjects.concat(includedBuilds);
1972
- includedProjectsFound = true;
1973
- } else {
1974
- // Automatically detect included builds
1975
- // Only from the root path for now
1976
- for (const abuildFile of [
1977
- join(gradleRootPath, "build.gradle"),
1978
- join(gradleRootPath, "build.gradle.kts"),
1979
- join(gradleRootPath, "settings.gradle"),
1980
- join(gradleRootPath, "settings.gradle.kts"),
1981
- ]) {
1982
- if (!safeExistsSync(abuildFile)) {
1983
- continue;
1974
+ }
1975
+ let parallelPropTaskOut = executeParallelGradleProperties(
1976
+ gradleRootPath,
1977
+ [null],
1978
+ process.env.GRADLE_INCLUDED_BUILDS
1979
+ ? []
1980
+ : ["--init-script", GRADLE_INIT_SCRIPT],
1981
+ );
1982
+ if (!process.env.GRADLE_INCLUDED_BUILDS) {
1983
+ const outputLines = parallelPropTaskOut.split("\n");
1984
+ for (const [i, line] of outputLines.entries()) {
1985
+ if (line.startsWith("Root project '")) {
1986
+ break;
1984
1987
  }
1985
- const buildSettings = analyzeBuildSettings(abuildFile);
1986
- if (buildSettings?.includedBuilds?.length) {
1987
- for (const aib of buildSettings.includedBuilds) {
1988
- if (!rootProjects.includes(aib)) {
1989
- rootProjects.push(aib);
1990
- includedProjectsFound = true;
1991
- }
1988
+ if (line.startsWith("<CDXGEN:includedBuild>")) {
1989
+ const includedBuild = line.split(">");
1990
+ if (!allProjectsStr.includes(includedBuild[1].trim())) {
1991
+ allProjectsStr.push(includedBuild[1].trim());
1992
1992
  }
1993
- break;
1994
1993
  }
1995
1994
  }
1996
1995
  }
1997
- if (includedProjectsFound) {
1996
+ if (allProjectsStr.length > 0) {
1998
1997
  thoughtLog(
1999
- `Wait, this gradle project uses composite builds. I must carefully process these ${rootProjects.length} projects including the root.`,
1998
+ `Wait, this gradle project uses composite builds. I must carefully process these ${allProjectsStr.length} projects, in addition to the root.`,
2000
1999
  );
2001
2000
  if (DEBUG_MODE) {
2002
- console.log(
2003
- `Additional root projects: ${rootProjects.join(" ").trim()}.`,
2004
- );
2001
+ console.log(`Composite builds: ${allProjectsStr.join(" ").trim()}.`);
2005
2002
  }
2003
+ parallelPropTaskOut = parallelPropTaskOut.concat(
2004
+ "\n",
2005
+ executeParallelGradleProperties(gradleRootPath, allProjectsStr),
2006
+ );
2007
+ allProjectsStr = [];
2006
2008
  }
2007
- const parallelPropTaskOut = executeParallelGradleProperties(
2008
- gradleRootPath,
2009
- rootProjects,
2010
- );
2011
2009
  const splitPropTaskOut = splitOutputByGradleProjects(parallelPropTaskOut, [
2012
2010
  "properties",
2013
2011
  ]);
2014
-
2015
2012
  for (const [key, propTaskOut] of splitPropTaskOut.entries()) {
2016
2013
  const retMap = parseGradleProperties(propTaskOut);
2017
2014
  const rootProject = retMap.rootProject;
@@ -2020,18 +2017,11 @@ export async function createJavaBom(path, options) {
2020
2017
  rootProject,
2021
2018
  retMap.metadata,
2022
2019
  );
2020
+ if (!key.startsWith(":")) {
2021
+ parentComponent = rootComponent;
2022
+ }
2023
2023
  gradleModules.set(key, rootComponent);
2024
- if (!rootProjects.includes(key)) {
2025
- if (rootGradleModule.name) {
2026
- if (DEBUG_MODE) {
2027
- console.log(
2028
- `Received new root component: ${rootComponent.name} with key ${key}. Please verify the value used for included builds. Using the name ${rootGradleModule.name}.`,
2029
- );
2030
- }
2031
- } else {
2032
- rootGradleModule = rootComponent;
2033
- }
2034
- } else if (!allProjectsAddedPurls.includes(rootComponent["purl"])) {
2024
+ if (!allProjectsAddedPurls.includes(rootComponent["purl"])) {
2035
2025
  allProjects.push(rootComponent);
2036
2026
  rootDependsOn.add(rootComponent["bom-ref"]);
2037
2027
  allProjectsAddedPurls.push(rootComponent["purl"]);
@@ -2039,7 +2029,6 @@ export async function createJavaBom(path, options) {
2039
2029
  allProjectsStr = allProjectsStr.concat(retMap.projects);
2040
2030
  }
2041
2031
  }
2042
- parentComponent = rootGradleModule;
2043
2032
  // Get the sub-project properties and set the root dependencies
2044
2033
  if (allProjectsStr?.length) {
2045
2034
  const modulesToSkip = process.env.GRADLE_SKIP_MODULES
@@ -2129,32 +2118,36 @@ export async function createJavaBom(path, options) {
2129
2118
  process.env.GRADLE_ARGS_DEPENDENCIES
2130
2119
  ? process.env.GRADLE_ARGS_DEPENDENCIES.split(" ")
2131
2120
  : [],
2121
+ gradleCmd.length,
2132
2122
  );
2133
- if (DEBUG_MODE) {
2134
- console.log(
2135
- "Executing",
2136
- gradleCmd,
2137
- `${gradleArguments.join(" ").substring(0, 150)} ...`,
2138
- "in",
2139
- gradleRootPath,
2123
+ const allOutputs = [];
2124
+ for (const gradleArg of gradleArguments) {
2125
+ if (DEBUG_MODE) {
2126
+ console.log(
2127
+ `Executing ${gradleCmd} with arguments ${gradleArg.join(" ").substring(0, 150)}... in ${gradleRootPath}`,
2128
+ );
2129
+ }
2130
+ thoughtLog(
2131
+ `Let's invoke '${basename(gradleCmd)}' with the arguments '${gradleArg.join(" ").substring(0, 100)} ...'.`,
2140
2132
  );
2141
- }
2142
- thoughtLog(
2143
- `Let's invoke '${basename(gradleCmd)}' with the arguments '${gradleArguments.join(" ").substring(0, 100)} ...'.`,
2144
- );
2145
- const sresult = spawnSync(gradleCmd, gradleArguments, {
2146
- cwd: gradleRootPath,
2147
- encoding: "utf-8",
2148
- timeout: TIMEOUT_MS,
2149
- maxBuffer: MAX_BUFFER,
2150
- });
2151
- if (sresult.status !== 0 || sresult.error) {
2152
- if (options.failOnError || DEBUG_MODE) {
2153
- console.error(sresult.stdout, sresult.stderr);
2133
+ const sresult = spawnSync(gradleCmd, gradleArg, {
2134
+ cwd: gradleRootPath,
2135
+ encoding: "utf-8",
2136
+ shell: isWin,
2137
+ timeout: TIMEOUT_MS,
2138
+ maxBuffer: MAX_BUFFER,
2139
+ });
2140
+ if (sresult.status !== 0 || sresult.error) {
2141
+ if (options.failOnError || DEBUG_MODE) {
2142
+ console.error(sresult.stdout, sresult.stderr);
2143
+ }
2144
+ options.failOnError && process.exit(1);
2145
+ }
2146
+ if (sresult.stdout !== null) {
2147
+ allOutputs.push(sresult.stdout);
2154
2148
  }
2155
- options.failOnError && process.exit(1);
2156
2149
  }
2157
- const sstdout = sresult.stdout;
2150
+ const sstdout = allOutputs.join("\n");
2158
2151
  if (sstdout) {
2159
2152
  const cmdOutput = Buffer.from(sstdout).toString();
2160
2153
  const perProjectOutput = splitOutputByGradleProjects(cmdOutput, [
@@ -2213,6 +2206,29 @@ export async function createJavaBom(path, options) {
2213
2206
  }
2214
2207
  options.failOnError && process.exit(1);
2215
2208
  }
2209
+ if (
2210
+ (!process.env.GRADLE_STOP_DAEMON &&
2211
+ (!process.env.GRADLE_USE_DAEMON ||
2212
+ ["true", "1"].includes(process.env.GRADLE_USE_DAEMON))) ||
2213
+ ["true", "1"].includes(process.env.GRADLE_STOP_DAEMON)
2214
+ ) {
2215
+ if (DEBUG_MODE) {
2216
+ console.log("Stopping gradle daemon...");
2217
+ }
2218
+ const sresult = spawnSync(gradleCmd, ["--stop"], {
2219
+ cwd: gradleRootPath,
2220
+ encoding: "utf-8",
2221
+ shell: isWin,
2222
+ timeout: TIMEOUT_MS,
2223
+ maxBuffer: MAX_BUFFER,
2224
+ });
2225
+ if (sresult.status !== 0 || sresult.error) {
2226
+ if (options.failOnError || DEBUG_MODE) {
2227
+ console.error(sresult.stdout, sresult.stderr);
2228
+ }
2229
+ options.failOnError && process.exit(1);
2230
+ }
2231
+ }
2216
2232
  // Should we attempt to resolve class names
2217
2233
  if (options.resolveClass || options.deep) {
2218
2234
  const tmpjarNSMapping = await collectJarNS(GRADLE_CACHE_DIR);
@@ -2581,14 +2597,16 @@ export async function createJavaBom(path, options) {
2581
2597
  );
2582
2598
  const millCmd = getMillCommand(millRootPath);
2583
2599
  const millCommonArgs = [
2584
- "--no-server",
2585
- "--silent",
2586
- "--disable-prompt",
2587
- "--disable-callgraph",
2588
- "-k",
2589
2600
  "--color",
2590
2601
  "false",
2602
+ "--disable-callgraph",
2603
+ "--disable-prompt",
2604
+ "--keep-going",
2605
+ "--silent",
2591
2606
  ];
2607
+ if (!["true", "1"].includes(process.env.MILL_USE_SERVER)) {
2608
+ millCommonArgs.unshift("--no-server");
2609
+ }
2592
2610
  const millArgs = [...millCommonArgs, "__.ivyDepsTree"];
2593
2611
  if (DEBUG_MODE) {
2594
2612
  console.log("Executing", millCmd, millArgs.join(" "), "in", millRootPath);
@@ -2674,6 +2692,28 @@ export async function createJavaBom(path, options) {
2674
2692
  parentComponent,
2675
2693
  );
2676
2694
  }
2695
+ if (
2696
+ (!process.env.MILL_SHUTDOWN_SERVER &&
2697
+ ["true", "1"].includes(process.env.MILL_USE_SERVER)) ||
2698
+ ["true", "1"].includes(process.env.MILL_SHUTDOWN_SERVER)
2699
+ ) {
2700
+ if (DEBUG_MODE) {
2701
+ console.log("Shutting down mill server...");
2702
+ }
2703
+ const sresult = spawnSync(millCmd, ["shutdown"], {
2704
+ cwd: millRootPath,
2705
+ encoding: "utf-8",
2706
+ shell: isWin,
2707
+ timeout: TIMEOUT_MS,
2708
+ maxBuffer: MAX_BUFFER,
2709
+ });
2710
+ if (sresult.status !== 0 || sresult.error) {
2711
+ if (options.failOnError || DEBUG_MODE) {
2712
+ console.error(sresult.stdout, sresult.stderr);
2713
+ }
2714
+ options.failOnError && process.exit(1);
2715
+ }
2716
+ }
2677
2717
  }
2678
2718
 
2679
2719
  pkgList = trimComponents(pkgList);
@@ -251,7 +251,9 @@ export async function createSlice(
251
251
  ? path.basename(options.output)
252
252
  : path.dirname(options.output);
253
253
  }
254
- const slicesFile = join(sliceOutputDir, `${sliceType}.slices.json`);
254
+ const slicesFile =
255
+ options[`${sliceType}SlicesFile`] ||
256
+ join(sliceOutputDir, `${sliceType}.slices.json`);
255
257
  const openapiSpecFile = basename(
256
258
  options.openapiSpecFile ||
257
259
  process.env?.ATOM_TOOLS_OPENAPI_FILENAME ||
@@ -3998,74 +3998,88 @@ export function parseGradleProperties(rawOutput, gradleModuleName = null) {
3998
3998
  *
3999
3999
  * @param {string} dir Directory to execute the command
4000
4000
  * @param {array} allProjectsStr List of all sub-projects (including the preceding `:`)
4001
+ * @param {array} extraArgs List of extra arguments to use when calling gradle
4001
4002
  *
4002
4003
  * @returns {string} The combined output for all subprojects of the Gradle properties task
4003
4004
  */
4004
- export function executeParallelGradleProperties(dir, allProjectsStr) {
4005
+ export function executeParallelGradleProperties(
4006
+ dir,
4007
+ allProjectsStr,
4008
+ extraArgs = [],
4009
+ ) {
4005
4010
  const gradleCmd = getGradleCommand(dir, null);
4006
4011
  const gradleArgs = buildGradleCommandArguments(
4007
- process.env.GRADLE_ARGS ? process.env.GRADLE_ARGS.split(" ") : [],
4012
+ extraArgs.concat(
4013
+ process.env.GRADLE_ARGS ? process.env.GRADLE_ARGS.split(" ") : [],
4014
+ ),
4008
4015
  allProjectsStr.map((project) =>
4009
4016
  project ? `${project}:properties` : "properties",
4010
4017
  ),
4011
4018
  process.env.GRADLE_ARGS_PROPERTIES
4012
4019
  ? process.env.GRADLE_ARGS_PROPERTIES.split(" ")
4013
4020
  : [],
4021
+ gradleCmd.length,
4014
4022
  );
4015
- if (DEBUG_MODE) {
4016
- console.log(
4017
- `Executing ${gradleCmd} with arguments ${gradleArgs.join(" ").substring(0, 150)}... in ${dir}`,
4018
- );
4019
- }
4020
- const result = spawnSync(gradleCmd, gradleArgs, {
4021
- cwd: dir,
4022
- encoding: "utf-8",
4023
- shell: isWin,
4024
- maxBuffer: MAX_BUFFER,
4025
- });
4026
- if (result.status !== 0 || result.error) {
4027
- if (process.env?.CDXGEN_IN_CONTAINER === "true") {
4028
- thoughtLog(
4029
- "Gradle build has failed. Perhaps the user is using the wrong container image?",
4030
- );
4031
- } else {
4032
- thoughtLog(
4033
- "Gradle build has failed. I recommend using Java container images.",
4034
- );
4035
- }
4036
- if (result.stderr) {
4037
- console.group("*** GRADLE BUILD ERRORS ***");
4038
- console.error(result.stdout, result.stderr);
4039
- console.groupEnd();
4040
- console.log(
4041
- "1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
4042
- );
4023
+ const allOutputs = [];
4024
+ for (const gradleArg of gradleArgs) {
4025
+ if (DEBUG_MODE) {
4043
4026
  console.log(
4044
- "2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:v11`.",
4027
+ `Executing ${gradleCmd} with arguments ${gradleArg.join(" ").substring(0, 150)}... in ${dir}`,
4045
4028
  );
4046
- if (result.stderr?.includes("not get unknown property")) {
4047
- console.log(
4048
- "3. Check if the SBOM is generated for the correct root project for your application.",
4029
+ }
4030
+ const result = spawnSync(gradleCmd, gradleArg, {
4031
+ cwd: dir,
4032
+ encoding: "utf-8",
4033
+ shell: isWin,
4034
+ maxBuffer: MAX_BUFFER,
4035
+ });
4036
+ if (result.status !== 0 || result.error) {
4037
+ if (process.env?.CDXGEN_IN_CONTAINER === "true") {
4038
+ thoughtLog(
4039
+ "Gradle build has failed. Perhaps the user is using the wrong container image?",
4049
4040
  );
4050
- } else if (
4051
- result.stderr?.includes(
4052
- "In version catalog libs, import of external catalog file failed",
4053
- )
4054
- ) {
4041
+ } else {
4042
+ thoughtLog(
4043
+ "Gradle build has failed. I recommend using Java container images.",
4044
+ );
4045
+ }
4046
+ if (result.stderr) {
4047
+ console.group("*** GRADLE BUILD ERRORS ***");
4048
+ console.error(result.stdout, result.stderr);
4049
+ console.groupEnd();
4055
4050
  console.log(
4056
- "3. Catalog file is required for gradle dependency resolution to succeed.",
4051
+ "1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
4057
4052
  );
4058
- } else if (result.stderr?.includes("Unrecognized option")) {
4059
4053
  console.log(
4060
- "3. Try removing the unrecognized options to improve compatibility with a range of Java versions. Refer to the error message above.",
4054
+ "2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:v11`.",
4061
4055
  );
4062
- }
4063
- if (result.stderr.includes("does not exist")) {
4064
- return "";
4056
+ if (result.stderr?.includes("not get unknown property")) {
4057
+ console.log(
4058
+ "3. Check if the SBOM is generated for the correct root project for your application.",
4059
+ );
4060
+ } else if (
4061
+ result.stderr?.includes(
4062
+ "In version catalog libs, import of external catalog file failed",
4063
+ )
4064
+ ) {
4065
+ console.log(
4066
+ "3. Catalog file is required for gradle dependency resolution to succeed.",
4067
+ );
4068
+ } else if (result.stderr?.includes("Unrecognized option")) {
4069
+ console.log(
4070
+ "3. Try removing the unrecognized options to improve compatibility with a range of Java versions. Refer to the error message above.",
4071
+ );
4072
+ }
4073
+ if (result.stderr.includes("does not exist")) {
4074
+ return "";
4075
+ }
4065
4076
  }
4066
4077
  }
4078
+ if (result.stdout !== null) {
4079
+ allOutputs.push(result.stdout);
4080
+ }
4067
4081
  }
4068
- const stdout = result.stdout;
4082
+ const stdout = allOutputs.join("\n");
4069
4083
  if (stdout) {
4070
4084
  return Buffer.from(stdout).toString();
4071
4085
  }
@@ -10451,6 +10465,10 @@ export function parseSbtTree(sbtTreeFile) {
10451
10465
  name = pkgParts[0];
10452
10466
  version = pkgParts[1];
10453
10467
  }
10468
+ if (!name?.length) {
10469
+ console.log(pkgLine, "was not parsed correctly!");
10470
+ return;
10471
+ }
10454
10472
  const purlString = new PackageURL(
10455
10473
  "maven",
10456
10474
  group,
@@ -12119,25 +12137,63 @@ export function getMillCommand(srcPath) {
12119
12137
  * @param {string[]} gradleArguments The general gradle arguments, which must only be added once
12120
12138
  * @param {string[]} gradleSubCommands The sub-commands that are to be executed by gradle
12121
12139
  * @param {string[]} gradleSubCommandArguments The arguments specific to the sub-command(s), which much be added PER sub-command
12140
+ * @param {int} gradleCommandLength The length of the full gradle-command
12122
12141
  *
12123
- * @returns {string[]} Array of arguments to be added to the gradle command
12142
+ * @returns {string[]} Array of arrays of arguments to be added to the gradle command
12124
12143
  */
12125
12144
  export function buildGradleCommandArguments(
12126
12145
  gradleArguments,
12127
12146
  gradleSubCommands,
12128
12147
  gradleSubCommandArguments,
12148
+ gradleCommandLength,
12129
12149
  ) {
12130
- let allGradleArguments = [
12150
+ const mainGradleArguments = [
12131
12151
  "--build-cache",
12132
12152
  "--console",
12133
12153
  "plain",
12134
12154
  "--no-parallel",
12135
- ].concat(gradleArguments);
12155
+ ]
12156
+ .concat(getGradleDaemonParameter())
12157
+ .concat(gradleArguments);
12158
+ const maxCliArgsLength = isWin
12159
+ ? 7500 - gradleCommandLength - mainGradleArguments.join(" ").length - 2
12160
+ : -1;
12161
+ if (DEBUG_MODE && maxCliArgsLength !== -1) {
12162
+ console.log(
12163
+ "Running on Windows with a very long command -- splitting into multiple commands",
12164
+ );
12165
+ }
12166
+ const splitArgs = [];
12167
+ let allGradleArguments = [].concat(mainGradleArguments);
12168
+ let remainingLength = maxCliArgsLength;
12136
12169
  for (const gradleSubCommand of gradleSubCommands) {
12170
+ const subCommandLength =
12171
+ [gradleSubCommand, ...gradleSubCommandArguments].join(" ").length + 1;
12172
+ if (maxCliArgsLength !== -1 && remainingLength - subCommandLength < 0) {
12173
+ splitArgs.push(allGradleArguments);
12174
+ allGradleArguments = [].concat(mainGradleArguments);
12175
+ remainingLength = maxCliArgsLength;
12176
+ }
12137
12177
  allGradleArguments.push(gradleSubCommand);
12138
12178
  allGradleArguments = allGradleArguments.concat(gradleSubCommandArguments);
12179
+ remainingLength -= subCommandLength;
12180
+ }
12181
+ if (allGradleArguments.length !== mainGradleArguments.length) {
12182
+ splitArgs.push(allGradleArguments);
12183
+ }
12184
+ return splitArgs;
12185
+ }
12186
+
12187
+ function getGradleDaemonParameter() {
12188
+ switch (process.env.GRADLE_USE_DAEMON) {
12189
+ case "default":
12190
+ return [];
12191
+ case "false":
12192
+ case "1":
12193
+ return ["--no-daemon"];
12194
+ default:
12195
+ return ["--daemon"];
12139
12196
  }
12140
- return allGradleArguments;
12141
12197
  }
12142
12198
 
12143
12199
  /**
@@ -285,7 +285,7 @@ export const validateRefs = (bomJson) => {
285
285
  parentPurlType &&
286
286
  childPurlType &&
287
287
  parentPurlType !== childPurlType &&
288
- !["oci", "generic"].includes(parentPurlType)
288
+ !["oci", "generic", "container"].includes(parentPurlType)
289
289
  ) {
290
290
  warningsList.push(
291
291
  `The parent package '${dep.ref}' (type ${parentPurlType}) depends on the child package '${don}' (type ${childPurlType}). This is a bug in cdxgen if this project is not a monorepo.`,
@@ -232,6 +232,7 @@ const OS_DISTRO_ALIAS = {
232
232
  "ubuntu-23.10": "mantic",
233
233
  "ubuntu-24.04": "noble",
234
234
  "ubuntu-24.10": "oracular",
235
+ "ubuntu-25.04": "plucky",
235
236
  "debian-14": "forky",
236
237
  "debian-14.5": "forky",
237
238
  "debian-13": "trixie",
@@ -1,10 +1,9 @@
1
1
  import { spawnSync } from "node:child_process";
2
2
  import fs from "node:fs";
3
3
  import http from "node:http";
4
- import os from "node:os";
5
4
  import path from "node:path";
6
5
  import process from "node:process";
7
- import url from "node:url";
6
+ import { URL } from "node:url";
8
7
  import bodyParser from "body-parser";
9
8
  import connect from "connect";
10
9
  import { createBom, submitBom } from "../cli/index.js";
@@ -27,6 +26,24 @@ app.use(
27
26
  );
28
27
  app.use(compression());
29
28
 
29
+ function isAllowedHost(hostname) {
30
+ if (!process.env.CDXGEN_SERVER_ALLOWED_HOSTS) {
31
+ return true;
32
+ }
33
+ return (process.env.CDXGEN_SERVER_ALLOWED_HOSTS || "")
34
+ .split(",")
35
+ .includes(hostname);
36
+ }
37
+
38
+ function isAllowedPath(p) {
39
+ if (!process.env.CDXGEN_SERVER_ALLOWED_PATHS) {
40
+ return true;
41
+ }
42
+ return (process.env.CDXGEN_SERVER_ALLOWED_PATHS || "")
43
+ .split(",")
44
+ .some((ap) => p.startsWith(ap));
45
+ }
46
+
30
47
  const gitClone = (repoUrl, branch = null) => {
31
48
  const tempDir = fs.mkdtempSync(
32
49
  path.join(getTmpDir(), path.basename(repoUrl)),
@@ -172,7 +189,8 @@ const start = (options) => {
172
189
  });
173
190
 
174
191
  app.use("/sbom", async (req, res) => {
175
- const q = url.parse(req.url, true).query;
192
+ const requestUrl = new URL(req.url, `http://${req.headers.host}`);
193
+ const q = Object.fromEntries(requestUrl.searchParams.entries());
176
194
  let cleanup = false;
177
195
  const reqOptions = parseQueryString(
178
196
  q,
@@ -190,9 +208,31 @@ const start = (options) => {
190
208
  }
191
209
  let srcDir = filePath;
192
210
  if (filePath.startsWith("http") || filePath.startsWith("git")) {
211
+ // Validate the hostnames
212
+ const gitUrlObj = new URL(filePath);
213
+ if (!isAllowedHost(gitUrlObj.hostname)) {
214
+ res.writeHead(403, { "Content-Type": "application/json" });
215
+ return res.end(
216
+ JSON.stringify({
217
+ error: "Host Not Allowed",
218
+ details: `The Git URL host is not allowed: '${gitUrlObj.hostname}'.`,
219
+ }),
220
+ );
221
+ }
193
222
  srcDir = gitClone(filePath, reqOptions.gitBranch);
194
223
  cleanup = true;
195
- } else if (srcDir !== path.resolve(srcDir)) {
224
+ } else {
225
+ if (!isAllowedPath(path.resolve(srcDir))) {
226
+ res.writeHead(403, { "Content-Type": "application/json" });
227
+ return res.end(
228
+ JSON.stringify({
229
+ error: "Path Not Allowed",
230
+ details: `Path is not allowed: '${srcDir}'.`,
231
+ }),
232
+ );
233
+ }
234
+ }
235
+ if (srcDir !== path.resolve(srcDir)) {
196
236
  console.log(
197
237
  `Invoke the API with an absolute path '${path.resolve(srcDir)}' instead of '${srcDir}' to reduce security risks.`,
198
238
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyclonedx/cdxgen",
3
- "version": "11.2.4",
3
+ "version": "11.2.5",
4
4
  "description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
5
5
  "homepage": "http://github.com/cyclonedx/cdxgen",
6
6
  "author": "Prabhu Subramanian <prabhu@appthreat.com>",
@@ -34,6 +34,10 @@
34
34
  {
35
35
  "name": "Adam Setch",
36
36
  "url": "https://github.com/setchy"
37
+ },
38
+ {
39
+ "name": "Roland Asmann",
40
+ "url": "https://github.com/malice00"
37
41
  }
38
42
  ],
39
43
  "type": "module",
@@ -97,7 +101,7 @@
97
101
  "yoctocolors": "^2.1.1"
98
102
  },
99
103
  "optionalDependencies": {
100
- "@appthreat/atom": "2.1.14",
104
+ "@appthreat/atom": "2.1.15",
101
105
  "@appthreat/cdx-proto": "1.0.1",
102
106
  "@cyclonedx/cdxgen-plugins-bin": "1.6.10",
103
107
  "@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.6.10",
@@ -136,7 +140,7 @@
136
140
  "negotiator": "^0.6.4"
137
141
  },
138
142
  "scripts": {
139
- "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --inject-globals false lib/managers/docker.test.js lib/helpers/package_specific/gradleutils.test.js lib/helpers/utils.test.js lib/helpers/display.test.js lib/stages/postgen/postgen.test.js lib/evinser/swiftsem.test.js",
143
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --inject-globals false lib/managers/docker.test.js lib/helpers/utils.test.js lib/helpers/display.test.js lib/stages/postgen/postgen.test.js lib/evinser/swiftsem.test.js",
140
144
  "watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch --inject-globals false",
141
145
  "lint:check": "biome check",
142
146
  "lint": "biome check --fix",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"AAk7BA;;;;;;;;GAQG;AACH,gFAFW,MAAM,SAchB;AAuXD;;;;;;;GAOG;AACH,mCALW,MAAM,qBAyEhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM;;;;EAKhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM;;;;EAkBhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BA+sChB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAuvBhB;AAED;;;;;;;;;;GAUG;AACH,+DAsEC;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAkehB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,8BA+YhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAuIhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAkEhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBA+KhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBAsHhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,qBAuBhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,8BAqDhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,8BA4ChB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BA8IhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BAmJhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBAmUhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAiJhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAwNhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA8ZhB;AAED;;;;;GAKG;AACH,2CAHW,MAAM;;;;;;;;;;;;;;;;;;;;GAoChB;AAED;;;;;;;;KA+DC;AAED;;;;;;GAMG;AACH,yDA+FC;AAED;;;;;;;;;GASG;AACH,2GAuCC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,EAAE,8BA6vBlB;AAED;;;;;GAKG;AACH,iCAHW,MAAM,8BAqUhB;AAED;;;;;GAKG;AACH,gCAHW,MAAM,qBA2QhB;AAED;;;;;;;GAOG;AACH,wDAHY,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA2HjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"AAw7BA;;;;;;;;GAQG;AACH,gFAFW,MAAM,SAchB;AAuXD;;;;;;;GAOG;AACH,mCALW,MAAM,qBAyEhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM;;;;EAKhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM;;;;EAkBhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAivChB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAuvBhB;AAED;;;;;;;;;;GAUG;AACH,+DAsEC;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAkehB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,8BA+YhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAuIhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAkEhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBA+KhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBAsHhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,qBAuBhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,8BAqDhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,8BA4ChB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BA8IhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BAmJhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBAmUhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAiJhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAwNhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA8ZhB;AAED;;;;;GAKG;AACH,2CAHW,MAAM;;;;;;;;;;;;;;;;;;;;GAoChB;AAED;;;;;;;;KA+DC;AAED;;;;;;GAMG;AACH,yDA+FC;AAED;;;;;;;;;GASG;AACH,2GAuCC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,EAAE,8BA6vBlB;AAED;;;;;GAKG;AACH,iCAHW,MAAM,8BAqUhB;AAED;;;;;GAKG;AACH,gCAHW,MAAM,qBA2QhB;AAED;;;;;;;GAOG;AACH,wDAHY,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA2HjD"}
@@ -294,10 +294,11 @@ export function parseGradleProperties(rawOutput: string, gradleModuleName?: stri
294
294
  *
295
295
  * @param {string} dir Directory to execute the command
296
296
  * @param {array} allProjectsStr List of all sub-projects (including the preceding `:`)
297
+ * @param {array} extraArgs List of extra arguments to use when calling gradle
297
298
  *
298
299
  * @returns {string} The combined output for all subprojects of the Gradle properties task
299
300
  */
300
- export function executeParallelGradleProperties(dir: string, allProjectsStr: any[]): string;
301
+ export function executeParallelGradleProperties(dir: string, allProjectsStr: any[], extraArgs?: any[]): string;
301
302
  /**
302
303
  * Parse bazel action graph output
303
304
  * @param {string} rawOutput Raw string output
@@ -1154,10 +1155,11 @@ export function getMillCommand(srcPath: string): string;
1154
1155
  * @param {string[]} gradleArguments The general gradle arguments, which must only be added once
1155
1156
  * @param {string[]} gradleSubCommands The sub-commands that are to be executed by gradle
1156
1157
  * @param {string[]} gradleSubCommandArguments The arguments specific to the sub-command(s), which much be added PER sub-command
1158
+ * @param {int} gradleCommandLength The length of the full gradle-command
1157
1159
  *
1158
- * @returns {string[]} Array of arguments to be added to the gradle command
1160
+ * @returns {string[]} Array of arrays of arguments to be added to the gradle command
1159
1161
  */
1160
- export function buildGradleCommandArguments(gradleArguments: string[], gradleSubCommands: string[], gradleSubCommandArguments: string[]): string[];
1162
+ export function buildGradleCommandArguments(gradleArguments: string[], gradleSubCommands: string[], gradleSubCommandArguments: string[], gradleCommandLength: int): string[];
1161
1163
  /**
1162
1164
  * Method to split the output produced by Gradle using parallel processing by project
1163
1165
  *
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"AA2SA,wDAkBC;AAED;;;;;GAKG;AACH,kDAFa,SAAS,MAAO,CAqB5B;AAED;;;;;;;GAOG;AACH,kEAqaC;AAsDD,gDAoDC;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,cACN,MAAM,WA0ChB;AAED;;;;;;;;GAQG;AACH,kCANW,MAAM,iBACN,MAAM,YACN,OAAO,GAEN,OAAO,CA8BlB"}
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"AA4SA,wDAkBC;AAED;;;;;GAKG;AACH,kDAFa,SAAS,MAAO,CAqB5B;AAED;;;;;;;GAOG;AACH,kEAqaC;AAsDD,gDAoDC;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,cACN,MAAM,WA0ChB;AAED;;;;;;;;GAQG;AACH,kCANW,MAAM,iBACN,MAAM,YACN,OAAO,GAEN,OAAO,CA8BlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"AA6HA,yDAKC;AAED,0CAyHC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"AA8IA,yDAKC;AAED,0CAgJC"}
@@ -1,48 +0,0 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
-
3
- /**
4
- * Function to parse the given gradle build file to identify properties such as included builds
5
- *
6
- * @param buildFile {build,settings}.gradle(.kts)? Build file in groovy or kotlin format
7
- * @param buildContent String content to parse directly.
8
- */
9
- export function analyzeBuildSettings(buildFile, buildContent) {
10
- const includedBuilds = new Set();
11
- if (!buildContent && !existsSync(buildFile)) {
12
- return undefined;
13
- }
14
- const data = buildContent || readFileSync(buildFile, "utf-8");
15
- let pluginManagementMode = false;
16
- for (let aline of data.split("\n")) {
17
- aline = aline.replaceAll("\r", "").trim();
18
- if (aline.includes("pluginManagement {")) {
19
- pluginManagementMode = true;
20
- }
21
- if (pluginManagementMode && aline === "}") {
22
- pluginManagementMode = false;
23
- }
24
- if (!pluginManagementMode) {
25
- if (aline.includes("includeBuild")) {
26
- aline = aline.replace("includeBuild", "").replaceAll(/[ "'()]/g, "");
27
- // Ignore relative includes for now
28
- if (!aline.startsWith(".")) {
29
- includedBuilds.add(`:${aline.trim()}`);
30
- }
31
- } else if (aline.includes("includedBuild(")) {
32
- aline = aline
33
- .split("includedBuild(")[1]
34
- .split(")")[0]
35
- .replaceAll(/[ "'()]/g, "");
36
- if (!aline.startsWith(".")) {
37
- includedBuilds.add(`:${aline.trim()}`);
38
- }
39
- }
40
- }
41
- }
42
- if (!includedBuilds.size) {
43
- return undefined;
44
- }
45
- return {
46
- includedBuilds: Array.from(includedBuilds),
47
- };
48
- }
@@ -1,65 +0,0 @@
1
- import { afterAll, beforeAll, describe, expect, test } from "@jest/globals";
2
- import { analyzeBuildSettings } from "./gradleutils.js";
3
-
4
- test("analyzeBuildSettings tests", () => {
5
- expect(analyzeBuildSettings()).toBeUndefined();
6
- expect(
7
- analyzeBuildSettings(
8
- undefined,
9
- `rootProject.name = "my-composite"
10
-
11
- includeBuild("my-app")
12
- includeBuild("my-utils")`,
13
- ),
14
- ).toEqual({
15
- includedBuilds: [":my-app", ":my-utils"],
16
- });
17
- expect(
18
- analyzeBuildSettings(
19
- undefined,
20
- `rootProject.name = 'my-composite'
21
-
22
- includeBuild 'my-app'
23
- includeBuild 'my-utils'`,
24
- ),
25
- ).toEqual({
26
- includedBuilds: [":my-app", ":my-utils"],
27
- });
28
- expect(
29
- analyzeBuildSettings(
30
- undefined,
31
- `tasks.register("run") {
32
- dependsOn(gradle.includedBuild("my-app").task(":app:run"))
33
- }`,
34
- ),
35
- ).toEqual({
36
- includedBuilds: [":my-app"],
37
- });
38
- expect(
39
- analyzeBuildSettings(
40
- undefined,
41
- `tasks.register('run') {
42
- dependsOn gradle.includedBuild('my-app').task(':app:run')
43
- }`,
44
- ),
45
- ).toEqual({
46
- includedBuilds: [":my-app"],
47
- });
48
-
49
- expect(
50
- analyzeBuildSettings(
51
- undefined,
52
- `pluginManagement {
53
- includeBuild("../url-verifier-plugin")
54
- }`,
55
- ),
56
- ).toBeUndefined();
57
- expect(
58
- analyzeBuildSettings(
59
- undefined,
60
- `pluginManagement {
61
- includeBuild '../url-verifier-plugin'
62
- }`,
63
- ),
64
- ).toBeUndefined();
65
- });