Skip to content
Permalink
Browse files
8276408: Deprecate Runtime.exec methods with a single string command …
…line argument

Reviewed-by: alanb
  • Loading branch information
Roger Riggs committed Nov 8, 2021
1 parent 75adf54 commit 7e73bca0b7a34af9fb73780491951539815651b4
Showing 5 changed files with 30 additions and 4 deletions.
@@ -290,6 +290,12 @@ public void halt(int status) {
* behaves in exactly the same way as the invocation
* {@link #exec(String, String[], File) exec}{@code (command, null, null)}.
*
* @deprecated This method is error-prone and should not be used, the corresponding method
* {@link #exec(String[])} or {@link ProcessBuilder} should be used instead.
* The command string is broken into tokens using only whitespace characters.
* For an argument with an embedded space, such as a filename, this can cause problems
* as the token does not include the full filename.
*
* @param command a specified system command.
*
* @return A new {@link Process} object for managing the subprocess
@@ -311,6 +317,7 @@ public void halt(int status) {
* @see #exec(String[], String[], File)
* @see ProcessBuilder
*/
@Deprecated(since="18")
public Process exec(String command) throws IOException {
return exec(command, null, null);
}
@@ -324,6 +331,12 @@ public Process exec(String command) throws IOException {
* behaves in exactly the same way as the invocation
* {@link #exec(String, String[], File) exec}{@code (command, envp, null)}.
*
* @deprecated This method is error-prone and should not be used, the corresponding method
* {@link #exec(String[], String[])} or {@link ProcessBuilder} should be used instead.
* The command string is broken into tokens using only whitespace characters.
* For an argument with an embedded space, such as a filename, this can cause problems
* as the token does not include the full filename.
*
* @param command a specified system command.
*
* @param envp array of strings, each element of which
@@ -352,6 +365,7 @@ public Process exec(String command) throws IOException {
* @see #exec(String[], String[], File)
* @see ProcessBuilder
*/
@Deprecated(since="18")
public Process exec(String command, String[] envp) throws IOException {
return exec(command, envp, null);
}
@@ -374,6 +388,12 @@ public Process exec(String command, String[] envp) throws IOException {
* produced by the tokenizer are then placed in the new string
* array {@code cmdarray}, in the same order.
*
* @deprecated This method is error-prone and should not be used, the corresponding method
* {@link #exec(String[], String[], File)} or {@link ProcessBuilder} should be used instead.
* The command string is broken into tokens using only whitespace characters.
* For an argument with an embedded space, such as a filename, this can cause problems
* as the token does not include the full filename.
*
* @param command a specified system command.
*
* @param envp array of strings, each element of which
@@ -406,6 +426,7 @@ public Process exec(String command, String[] envp) throws IOException {
* @see ProcessBuilder
* @since 1.3
*/
@Deprecated(since="18")
public Process exec(String command, String[] envp, File dir)
throws IOException {
if (command.isEmpty())
@@ -49,17 +49,20 @@ public static void main(String[] args) throws Throwable {
final Runtime rt = Runtime.getRuntime();

try {
rt.exec("no-such-file");
String[] cmd = {"no-such-file"};
rt.exec(cmd);
throw new Error("expected IOException not thrown");
} catch (IOException expected) {/* OK */}

try {
rt.exec(".");
String[] cmd = {"."};
rt.exec(cmd);
throw new Error("expected IOException not thrown");
} catch (IOException expected) {/* OK */}

try {
rt.exec(TrueCommand, null, new File("no-such-dir"));
String[] cmd = {TrueCommand};
rt.exec(cmd, null, new File("no-such-dir"));
throw new Error("expected IOException not thrown");
} catch (IOException expected) {/* OK */}

@@ -29,6 +29,7 @@

public class BadEnvp {

@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {
Runtime r = Runtime.getRuntime();
java.io.File dir = new java.io.File(".");
@@ -41,7 +41,7 @@ public static void main(String args[]) throws Exception {
}
UnixCommands.ensureCommandsAvailable("true");

final String trueCmd = UnixCommands.findCommand("true");
final String[] trueCmd = {UnixCommands.findCommand("true")};
File dir = new File(".");
for (int i = 1; i <= N; i++) {
System.out.print(i);
@@ -62,6 +62,7 @@ public void testRuntimeExecWithArray() throws Exception {
@Test
public void testRuntimeExecWithString() throws Exception {
String cmd = String.join(" ", CMD_ARRAY);
@SuppressWarnings("deprecation")
Process process = Runtime.getRuntime().exec(cmd, null,
new File(TEST_CLASSES));
verifyProcessOutput(process);

1 comment on commit 7e73bca

@openjdk-notifier
Copy link

@openjdk-notifier openjdk-notifier bot commented on 7e73bca Nov 8, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.