JS: Support XML extraction when run with codeql

This commit is contained in:
Asger Feldthaus
2020-09-15 12:25:07 +01:00
parent c106b6777c
commit e70bb20f34
2 changed files with 38 additions and 5 deletions

View File

@@ -60,6 +60,7 @@ import com.semmle.util.io.WholeIO;
import com.semmle.util.io.csv.CSVReader;
import com.semmle.util.language.LegacyLanguage;
import com.semmle.util.process.Env;
import com.semmle.util.process.Env.OS;
import com.semmle.util.projectstructure.ProjectLayout;
import com.semmle.util.trap.TrapWriter;
@@ -1239,11 +1240,29 @@ protected DependencyInstallationResult preparePackagesAndDependencies(Set<Path>
protected void extractXml() throws IOException {
if (xmlExtensions.isEmpty()) return;
List<String> cmd = new ArrayList<>();
cmd.add("odasa");
cmd.add("index");
cmd.add("--xml");
cmd.add("--extensions");
cmd.addAll(xmlExtensions);
if (EnvironmentVariables.getCodeQLDist() == null) {
// Use the legacy odasa XML extractor
cmd.add("odasa");
cmd.add("index");
cmd.add("--xml");
cmd.add("--extensions");
cmd.addAll(xmlExtensions);
} else {
String command = Env.getOS() == OS.WINDOWS ? "codeql.cmd" : "codeql";
cmd.add(EnvironmentVariables.getCodeQLDist() + "/" + command);
cmd.add("database");
cmd.add("index-files");
cmd.add("--language");
cmd.add("xml");
cmd.add("--size-limit");
cmd.add("10m");
for (String extension : xmlExtensions) {
cmd.add("--include-extension");
cmd.add(extension);
}
cmd.add("--");
cmd.add(EnvironmentVariables.getWipDatabase());
}
ProcessBuilder pb = new ProcessBuilder(cmd);
try {
pb.redirectError(Redirect.INHERIT);

View File

@@ -14,6 +14,11 @@ public class EnvironmentVariables {
public static final String LGTM_WORKSPACE_ENV_VAR =
"LGTM_WORKSPACE";
public static final String CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR =
"CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE";
public static final String CODEQL_DIST_ENV_VAR = "CODEQL_DIST";
/**
* Gets the extractor root based on the <code>CODEQL_EXTRACTOR_JAVASCRIPT_ROOT</code> or <code>
* SEMMLE_DIST</code> or environment variable, or <code>null</code> if neither is set.
@@ -49,4 +54,13 @@ public class EnvironmentVariables {
throw new UserError(CODEQL_EXTRACTOR_JAVASCRIPT_SCRATCH_DIR_ENV_VAR + " or " + LGTM_WORKSPACE_ENV_VAR + " must be set");
}
public static String getCodeQLDist() {
return Env.systemEnv().getNonEmpty(CODEQL_DIST_ENV_VAR);
}
/** Gets the output database directory. */
public static String getWipDatabase() {
return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR);
}
}