Skip to content

Commit 1931693

Browse files
authored
Merge pull request #4310 from asgerf/js/extract-xml-with-codeql
Approved by aibaars, esbena
2 parents e012dce + d34bd51 commit 1931693

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import com.semmle.util.io.csv.CSVReader;
6161
import com.semmle.util.language.LegacyLanguage;
6262
import com.semmle.util.process.Env;
63+
import com.semmle.util.process.Env.OS;
6364
import com.semmle.util.projectstructure.ProjectLayout;
6465
import com.semmle.util.trap.TrapWriter;
6566

@@ -1239,11 +1240,29 @@ public Set<String> getXmlExtensions() {
12391240
protected void extractXml() throws IOException {
12401241
if (xmlExtensions.isEmpty()) return;
12411242
List<String> cmd = new ArrayList<>();
1242-
cmd.add("odasa");
1243-
cmd.add("index");
1244-
cmd.add("--xml");
1245-
cmd.add("--extensions");
1246-
cmd.addAll(xmlExtensions);
1243+
if (EnvironmentVariables.getCodeQLDist() == null) {
1244+
// Use the legacy odasa XML extractor
1245+
cmd.add("odasa");
1246+
cmd.add("index");
1247+
cmd.add("--xml");
1248+
cmd.add("--extensions");
1249+
cmd.addAll(xmlExtensions);
1250+
} else {
1251+
String command = Env.getOS() == OS.WINDOWS ? "codeql.exe" : "codeql";
1252+
cmd.add(Paths.get(EnvironmentVariables.getCodeQLDist(), command).toString());
1253+
cmd.add("database");
1254+
cmd.add("index-files");
1255+
cmd.add("--language");
1256+
cmd.add("xml");
1257+
cmd.add("--size-limit");
1258+
cmd.add("10m");
1259+
for (String extension : xmlExtensions) {
1260+
cmd.add("--include-extension");
1261+
cmd.add(extension);
1262+
}
1263+
cmd.add("--");
1264+
cmd.add(EnvironmentVariables.getWipDatabase());
1265+
}
12471266
ProcessBuilder pb = new ProcessBuilder(cmd);
12481267
try {
12491268
pb.redirectError(Redirect.INHERIT);

javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public class EnvironmentVariables {
1414
public static final String LGTM_WORKSPACE_ENV_VAR =
1515
"LGTM_WORKSPACE";
1616

17+
public static final String CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR =
18+
"CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE";
19+
20+
public static final String CODEQL_DIST_ENV_VAR = "CODEQL_DIST";
21+
1722
/**
1823
* Gets the extractor root based on the <code>CODEQL_EXTRACTOR_JAVASCRIPT_ROOT</code> or <code>
1924
* SEMMLE_DIST</code> or environment variable, or <code>null</code> if neither is set.
@@ -49,4 +54,13 @@ public static String getScratchDir() {
4954

5055
throw new UserError(CODEQL_EXTRACTOR_JAVASCRIPT_SCRATCH_DIR_ENV_VAR + " or " + LGTM_WORKSPACE_ENV_VAR + " must be set");
5156
}
57+
58+
public static String getCodeQLDist() {
59+
return Env.systemEnv().getNonEmpty(CODEQL_DIST_ENV_VAR);
60+
}
61+
62+
/** Gets the output database directory. */
63+
public static String getWipDatabase() {
64+
return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR);
65+
}
5266
}

0 commit comments

Comments
 (0)