< prev index next >

test/lib/jdk/test/lib/process/ProcessTools.java

Print this page
rev 51614 : imported patch 8210039-1

@@ -38,10 +38,13 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Predicate;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
 import jdk.test.lib.JDKToolFinder;
 import jdk.test.lib.Utils;
 
 public final class ProcessTools {

@@ -67,11 +70,11 @@
      * @param processBuilder ProcessBuilder to run.
      * @return Output from process.
      * @throws IOException If an I/O error occurs.
      */
     public static OutputBuffer getOutput(ProcessBuilder processBuilder) throws IOException {
-        return getOutput(processBuilder.start());
+        return getOutput(privilegedStart(processBuilder));
     }
 
     /**
      * Pumps stdout and stderr the running process into a String.
      *

@@ -199,11 +202,11 @@
                                        final Predicate<String> linePredicate,
                                        long timeout,
                                        TimeUnit unit)
     throws IOException, InterruptedException, TimeoutException {
         System.out.println("["+name+"]:" + processBuilder.command().stream().collect(Collectors.joining(" ")));
-        Process p = processBuilder.start();
+        Process p = privilegedStart(processBuilder);
         StreamPumper stdout = new StreamPumper(p.getInputStream());
         StreamPumper stderr = new StreamPumper(p.getErrorStream());
 
         stdout.addPump(new LineForwarder(name, System.out));
         stderr.addPump(new LineForwarder(name, System.err));

@@ -391,11 +394,11 @@
     public static OutputAnalyzer executeProcess(ProcessBuilder pb) throws Exception {
         OutputAnalyzer output = null;
         Process p = null;
         boolean failed = false;
         try {
-            p = pb.start();
+            p = privilegedStart(pb);
             output = new OutputAnalyzer(p);
             p.waitFor();
 
             return output;
         } catch (Throwable t) {

@@ -493,10 +496,21 @@
         OutputAnalyzer analyzer = ProcessTools.executeProcess(pb);
         System.out.println(analyzer.getOutput());
         return analyzer;
     }
 
+    private static Process privilegedStart(ProcessBuilder pb) throws IOException {
+        try {
+            return AccessController.doPrivileged(
+                (PrivilegedExceptionAction<Process>) () -> pb.start());
+        } catch (PrivilegedActionException e) {
+            @SuppressWarnings("unchecked")
+            IOException t = (IOException) e.getException();
+            throw t;
+        }
+    }
+
     private static class ProcessImpl extends Process {
 
         private final Process p;
         private final Future<Void> stdoutTask;
         private final Future<Void> stderrTask;
< prev index next >