提交 0e9a4d8f 编写于 作者: K ksrini

8029388: java.exe consumes argument intended for launched java class

Reviewed-by: mchung
上级 fb9e7bee
/*
* 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");
} 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");
checkOption(javaCmd, "-d64");
} else if (is64Bit) {
checkAcceptance(javaCmd, "-d64");
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());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册