mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-13 03:45:19 +00:00
8029388: java.exe consumes argument intended for launched java class
Reviewed-by: mchung
This commit is contained in:
parent
610b6254a3
commit
cd8db125be
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -179,7 +179,7 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
|
||||
int wanted = running;
|
||||
|
||||
char** argv = *pargv;
|
||||
for (i = 0; i < *pargc ; i++) {
|
||||
for (i = 1; i < *pargc ; i++) {
|
||||
if (JLI_StrCmp(argv[i], "-J-d64") == 0 || JLI_StrCmp(argv[i], "-d64") == 0) {
|
||||
wanted = 64;
|
||||
continue;
|
||||
@ -188,6 +188,11 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
|
||||
wanted = 32;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsJavaArgs() && argv[i][0] != '-')
|
||||
continue;
|
||||
if (argv[i][0] != '-')
|
||||
break;
|
||||
}
|
||||
if (running != wanted) {
|
||||
JLI_ReportErrorMessage(JRE_ERROR2, wanted);
|
||||
|
||||
@ -23,41 +23,43 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 4894330 4810347 6277269
|
||||
* @bug 4894330 4810347 6277269 8029388
|
||||
* @compile -XDignore.symbol.file ChangeDataModel.java
|
||||
* @run main ChangeDataModel
|
||||
* @summary Verify -d32 and -d64 options are accepted(rejected) on all platforms
|
||||
* @author Joseph D. Darcy, ksrini
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ChangeDataModel extends TestHelper {
|
||||
private static final File TestJar = new File("test" + JAR_FILE_EXT);
|
||||
private static final String OptionName = "Args";
|
||||
private static final File TestOptionJar = new File(OptionName + JAR_FILE_EXT);
|
||||
private static final String OPT_PREFIX = "ARCH_OPT:";
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
static void createTestJar() throws Exception {
|
||||
String[] code = {
|
||||
" public static void main(String argv[]) {",
|
||||
" System.out.println(\"" + OPT_PREFIX + "-d\" + System.getProperty(\"sun.arch.data.model\", \"none\"));",
|
||||
" }",
|
||||
};
|
||||
" }",};
|
||||
createJar(TestJar, code);
|
||||
}
|
||||
public static void main(String... args) throws Exception {
|
||||
createTestJar();
|
||||
createOptionsJar();
|
||||
|
||||
// verify if data model flag for default data model is accepted
|
||||
// verify if data model flag for default data model is accepted, also
|
||||
// verify if the complimentary data model is rejected.
|
||||
if (is32Bit) {
|
||||
checkAcceptance(javaCmd, "-d32");
|
||||
checkRejection(javaCmd, "-d64");
|
||||
checkOption(javaCmd, "-d64");
|
||||
} else if (is64Bit) {
|
||||
checkAcceptance(javaCmd, "-d64");
|
||||
} else {
|
||||
throw new Error("unsupported data model");
|
||||
}
|
||||
|
||||
// Negative tests: ensure that non-dual mode systems reject the
|
||||
// complementary (other) data model
|
||||
if (is32Bit) {
|
||||
checkRejection(javaCmd, "-d64");
|
||||
} else if (is64Bit) {
|
||||
checkRejection(javaCmd, "-d32");
|
||||
checkOption(javaCmd, "-d32");
|
||||
} else {
|
||||
throw new Error("unsupported data model");
|
||||
}
|
||||
@ -81,4 +83,44 @@ public class ChangeDataModel extends TestHelper {
|
||||
throw new RuntimeException(message);
|
||||
}
|
||||
}
|
||||
|
||||
static void checkOption(String cmd, String dmodel) throws Exception {
|
||||
TestResult tr = doExec(cmd, "-jar", TestOptionJar.getAbsolutePath(), dmodel);
|
||||
verifyOption(tr, dmodel);
|
||||
|
||||
tr = doExec(cmd, "-cp", ".", OptionName, dmodel);
|
||||
verifyOption(tr, dmodel);
|
||||
}
|
||||
|
||||
static void verifyOption(TestResult tr, String dmodel) {
|
||||
if (!tr.contains(OPT_PREFIX + dmodel)) {
|
||||
System.out.println(tr);
|
||||
String message = "app argument: " + dmodel + " not found.";
|
||||
throw new RuntimeException(message);
|
||||
}
|
||||
if (!tr.isOK()) {
|
||||
System.out.println(tr);
|
||||
String message = "app argument: " + dmodel + " interpreted ?";
|
||||
throw new RuntimeException(message);
|
||||
}
|
||||
}
|
||||
|
||||
static void createOptionsJar() throws Exception {
|
||||
List<String> code = new ArrayList<>();
|
||||
code.add("public class Args {");
|
||||
code.add(" public static void main(String argv[]) {");
|
||||
code.add(" for (String x : argv)");
|
||||
code.add(" System.out.println(\"" + OPT_PREFIX + "\" + x);");
|
||||
code.add(" }");
|
||||
code.add("}");
|
||||
File optionsJava = new File(OptionName + JAVA_FILE_EXT);
|
||||
createFile(optionsJava, code);
|
||||
File optionsClass = new File(OptionName + CLASS_FILE_EXT);
|
||||
|
||||
compile(optionsJava.getName());
|
||||
createJar("cvfe",
|
||||
TestOptionJar.getName(),
|
||||
OptionName,
|
||||
optionsClass.getName());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user