Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8276408: Deprecate Runtime.exec methods with a single string command line argument #6233

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -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);