|
1 | 1 | package com.semmle.js.parser; |
2 | 2 |
|
3 | | -import ch.qos.logback.classic.Level; |
| 3 | +import java.io.BufferedReader; |
| 4 | +import java.io.BufferedWriter; |
| 5 | +import java.io.ByteArrayOutputStream; |
| 6 | +import java.io.Closeable; |
| 7 | +import java.io.File; |
| 8 | +import java.io.IOException; |
| 9 | +import java.io.InputStream; |
| 10 | +import java.io.InputStreamReader; |
| 11 | +import java.io.OutputStream; |
| 12 | +import java.io.OutputStreamWriter; |
| 13 | +import java.lang.ProcessBuilder.Redirect; |
| 14 | +import java.util.ArrayList; |
| 15 | +import java.util.Arrays; |
| 16 | +import java.util.Collections; |
| 17 | +import java.util.List; |
| 18 | + |
4 | 19 | import com.google.gson.JsonArray; |
5 | 20 | import com.google.gson.JsonElement; |
6 | 21 | import com.google.gson.JsonObject; |
|
21 | 36 | import com.semmle.util.process.AbstractProcessBuilder; |
22 | 37 | import com.semmle.util.process.Builder; |
23 | 38 | import com.semmle.util.process.Env; |
24 | | -import java.io.BufferedReader; |
25 | | -import java.io.BufferedWriter; |
26 | | -import java.io.ByteArrayOutputStream; |
27 | | -import java.io.Closeable; |
28 | | -import java.io.File; |
29 | | -import java.io.IOException; |
30 | | -import java.io.InputStream; |
31 | | -import java.io.InputStreamReader; |
32 | | -import java.io.OutputStream; |
33 | | -import java.io.OutputStreamWriter; |
34 | | -import java.lang.ProcessBuilder.Redirect; |
35 | | -import java.util.ArrayList; |
36 | | -import java.util.Arrays; |
37 | | -import java.util.Collections; |
38 | | -import java.util.List; |
| 39 | + |
| 40 | +import ch.qos.logback.classic.Level; |
39 | 41 |
|
40 | 42 | /** |
41 | 43 | * The Java half of our wrapper for invoking the TypeScript parser. |
@@ -105,14 +107,6 @@ public class TypeScriptParser { |
105 | 107 | */ |
106 | 108 | public static final String TYPESCRIPT_NODE_FLAGS = "SEMMLE_TYPESCRIPT_NODE_FLAGS"; |
107 | 109 |
|
108 | | - /** |
109 | | - * Flags that may be passed using {@link #TYPESCRIPT_NODE_FLAGS} |
110 | | - */ |
111 | | - private static final Set<String> allowedDebugNodeFlags = new HashSet<String>(Arrays.fromList( |
112 | | - "--inspect", |
113 | | - "--inspect-brk" |
114 | | - )); |
115 | | - |
116 | 110 | /** The Node.js parser wrapper process, if it has been started already. */ |
117 | 111 | private Process parserWrapperProcess; |
118 | 112 |
|
@@ -253,8 +247,16 @@ private void setupParserWrapper() { |
253 | 247 | File parserWrapper = getParserWrapper(); |
254 | 248 |
|
255 | 249 | String debugFlagString = Env.systemEnv().getNonEmpty(TYPESCRIPT_NODE_FLAGS); |
256 | | - List<String> debugFlags = debugFlagString == null ? new ArrayList<>() : debugFlagString.split(" "); |
257 | | - debugFlags.retainAll(allowedDebugNodeFlags); |
| 250 | + List<String> debugFlags = new ArrayList<>(); |
| 251 | + if (debugFlagString != null) { |
| 252 | + for (String flag : debugFlagString.split(" ")) { |
| 253 | + if (!flag.startsWith("--inspect") || flag.contains(":")) { |
| 254 | + System.err.println("Ignoring unrecognized Node flag: '" + flag + "'"); |
| 255 | + } else { |
| 256 | + debugFlags.add(flag); |
| 257 | + } |
| 258 | + } |
| 259 | + } |
258 | 260 |
|
259 | 261 | List<String> cmd = getNodeJsRuntimeInvocation(); |
260 | 262 | cmd.add("--max_old_space_size=" + (mainMemoryMb + reserveMemoryMb)); |
|
0 commit comments