From 13e6e309585b18210b71d8ecc70af2a075804873 Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Sun, 28 Nov 2021 18:44:52 +0530 Subject: [PATCH] Pass -Djava.security.manager=allow while launching JUnit forked VM to allow JUnit triggered code to set security manager at runtime --- .../tools/ant/taskdefs/optional/junit/JUnitTask.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java index 2f6b42e43..02fc038f6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java @@ -64,6 +64,7 @@ import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Permissions; import org.apache.tools.ant.types.PropertySet; import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JavaEnvUtils; import org.apache.tools.ant.util.LoaderUtils; import org.apache.tools.ant.util.SplitClassLoader; import org.apache.tools.ant.util.StringUtils; @@ -1164,6 +1165,15 @@ public class JUnitTask extends Task { } catch (final CloneNotSupportedException e) { throw new BuildException("This shouldn't happen", e, getLocation()); } + // if Java 18, then we set -Djava.security.manager=allow so as to allow + // Ant code to internally set the security manager + if (JavaEnvUtils.isAtLeastJavaVersion("18")) { + log("Setting -Djava.security.manager=allow on forked JVM of JUnit task", Project.MSG_VERBOSE); + final Environment.Variable securityManagerSysProp = new Environment.Variable(); + securityManagerSysProp.setKey("java.security.manager"); + securityManagerSysProp.setValue("allow"); + cmd.addSysproperty(securityManagerSysProp); + } if (casesFile == null) { cmd.createArgument().setValue(test.getName()); if (test.getMethods() != null) {