Skip to content

Commit f279f41

Browse files
committed
escape spaces in inherited agents and variables
1 parent b93ef78 commit f279f41

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

pitest-entry/src/main/java/org/pitest/process/Java9Process.java

+17-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ private List<String> createLaunchArgs(JavaAgent agentJarLocator, List<String> ar
113113

114114
cmd.addAll(args);
115115

116-
addLaunchJavaAgents(cmd);
116+
addLaunchJavaAgentsAndEnvironmentVariables(cmd);
117117

118118
return cmd;
119119
}
@@ -136,17 +136,31 @@ private Path createArgsFile(List<String> cmd) {
136136
private static void addPITJavaAgent(JavaAgent agentJarLocator,
137137
List<String> cmd) {
138138
final Optional<String> jarLocation = agentJarLocator.getJarLocation();
139-
jarLocation.ifPresent(l -> cmd.add("-javaagent:" + l));
139+
jarLocation.ifPresent(l -> cmd.add("-javaagent:\"" + l + "\""));
140140
}
141141

142-
private static void addLaunchJavaAgents(List<String> cmd) {
142+
private static void addLaunchJavaAgentsAndEnvironmentVariables(List<String> cmd) {
143143
RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
144144
List<String> agents = rt.getInputArguments().stream()
145145
.filter(isJavaAgentParam().or(isEnvironmentSetting()))
146+
.map(Java9Process::escapeSpaces)
146147
.collect(Collectors.toList());
147148
cmd.addAll(agents);
148149
}
149150

151+
static String escapeSpaces(String line) {
152+
if (!line.contains(" ")) {
153+
return line;
154+
}
155+
if (line.startsWith("-D")) {
156+
return line.replace("=", "=\"") + "\"";
157+
}
158+
if (line.startsWith("-javaagent")) {
159+
return line.replace("-javaagent:", "-javaagent:\"") + "\"";
160+
}
161+
return line;
162+
}
163+
150164
private static Predicate<String> isEnvironmentSetting() {
151165
return a -> a.startsWith("-D");
152166
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.pitest.process;
2+
3+
import org.junit.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
7+
public class Java9ProcessTest {
8+
9+
@Test
10+
public void escapesJavaAgentLinesWithSpaces() {
11+
String actual = Java9Process.escapeSpaces("-javaagent:foo bar");
12+
assertThat(actual).isEqualTo("-javaagent:\"foo bar\"");
13+
}
14+
15+
@Test
16+
public void doesntTouchAgentsWithNoSpaces() {
17+
String actual = Java9Process.escapeSpaces("-javaagent:foobar");
18+
assertThat(actual).isEqualTo("-javaagent:foobar");
19+
}
20+
21+
@Test
22+
public void escapesVariableWithSpaces() {
23+
String actual = Java9Process.escapeSpaces("-Dthingy=foo bar");
24+
assertThat(actual).isEqualTo("-Dthingy=\"foo bar\"");
25+
}
26+
27+
@Test
28+
public void doesntTouchVariablesWithoutSpaces() {
29+
String actual = Java9Process.escapeSpaces("-Dthingy=foobar");
30+
assertThat(actual).isEqualTo("-Dthingy=foobar");
31+
}
32+
}

0 commit comments

Comments
 (0)