undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
66
test/jdk/java/lang/System/MacEncoding/ExpectedEncoding.java
Normal file
66
test/jdk/java/lang/System/MacEncoding/ExpectedEncoding.java
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2017, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check that the value of file.encoding and sun.jnu.encoding match the expected
|
||||
* values passed in on the command-line.
|
||||
*/
|
||||
public class ExpectedEncoding {
|
||||
public static void main(String[] args) {
|
||||
boolean failed = false;
|
||||
if (args.length != 2) {
|
||||
System.out.println("Usage:");
|
||||
System.out.println("$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>");
|
||||
System.out.println("$ use \"skip\" to skip checking property's value");
|
||||
System.exit(1);
|
||||
}
|
||||
String expectFileEnc = args[0];
|
||||
String expectSunJnuEnc = args[1];
|
||||
|
||||
String fileEnc = System.getProperty("file.encoding");
|
||||
String jnuEnc = System.getProperty("sun.jnu.encoding");
|
||||
|
||||
if ("skip".equals(expectFileEnc)) {
|
||||
System.err.println("Expected file.encoding is \"skip\", ignoring");
|
||||
} else {
|
||||
if (fileEnc == null || !fileEnc.equals(expectFileEnc)) {
|
||||
System.err.println("Expected file.encoding: " + expectFileEnc);
|
||||
System.err.println("Actual file.encoding: " + fileEnc);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
if ("skip".equals(expectSunJnuEnc)) {
|
||||
System.err.println("Expected sun.jnu.encoding is \"skip\", ignoring");
|
||||
} else {
|
||||
if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) {
|
||||
System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc);
|
||||
System.err.println("Actual sun.jnu.encoding: " + jnuEnc);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (failed) {
|
||||
throw new RuntimeException("Test Failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
67
test/jdk/java/lang/System/MacEncoding/MacJNUEncoding.java
Normal file
67
test/jdk/java/lang/System/MacEncoding/MacJNUEncoding.java
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2023, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8003228 8260265
|
||||
* @summary Test the value of sun.jnu.encoding on Mac
|
||||
* @requires (os.family == "mac")
|
||||
* @library /test/lib
|
||||
* @build jdk.test.lib.process.*
|
||||
* ExpectedEncoding
|
||||
* @run main MacJNUEncoding UTF-8 UTF-8 C
|
||||
* @run main MacJNUEncoding US-ASCII UTF-8 C COMPAT
|
||||
* @run main MacJNUEncoding UTF-8 UTF-8 en_US.UTF-8
|
||||
* @run main MacJNUEncoding UTF-8 UTF-8 en_US.UTF-8 COMPAT
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
public class MacJNUEncoding {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if (args.length != 3 && args.length != 4) {
|
||||
System.out.println("Usage:");
|
||||
System.out.println(" java MacJNUEncoding"
|
||||
+ " <expected file.encoding> <expected sun.jnu.encoding> <locale> [<user's file.encoding>]");
|
||||
throw new IllegalArgumentException("missing arguments");
|
||||
}
|
||||
|
||||
final String locale = args[2];
|
||||
System.out.println("Running test for locale: " + locale);
|
||||
var cmds = (args.length == 4)
|
||||
? List.of("-Dfile.encoding=" + args[3], ExpectedEncoding.class.getName(), args[0], args[1])
|
||||
: List.of(ExpectedEncoding.class.getName(), args[0], args[1]);
|
||||
ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(cmds);
|
||||
Map<String, String> env = pb.environment();
|
||||
env.put("LANG", locale);
|
||||
env.put("LC_ALL", locale);
|
||||
ProcessTools.executeProcess(pb)
|
||||
.outputTo(System.out)
|
||||
.errorTo(System.err)
|
||||
.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
||||
172
test/jdk/java/lang/System/MacEncoding/TestFileEncoding.java
Normal file
172
test/jdk/java/lang/System/MacEncoding/TestFileEncoding.java
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
* Copyright (c) 2013, 2021, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8011194 8260265
|
||||
* @summary Test value of file.encoding for corresponding value of LANG, etc
|
||||
* @library ../../../../tools/launcher/ ../
|
||||
* @modules jdk.compiler
|
||||
* @build TestHelper TestFileEncoding ExpectedEncoding
|
||||
* @run main TestFileEncoding UTF-8
|
||||
* @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding
|
||||
* @run main/othervm -DuserEncoding=COMPAT TestFileEncoding UTF-8
|
||||
* @run main TestFileEncoding UTF-8 en_US.UTF-8
|
||||
* @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding en_US.UTF-8
|
||||
* @run main/othervm -DuserEncoding=COMPAT TestFileEncoding UTF-8 en_US.UTF-8
|
||||
* @run main TestFileEncoding UTF-8 C
|
||||
* @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding C
|
||||
* @run main/othervm -DuserEncoding=COMPAT TestFileEncoding US-ASCII C
|
||||
* @author Brent Christian
|
||||
*/
|
||||
|
||||
/**
|
||||
* Setup the environment and run a sub-test to check the expected value of
|
||||
* file.encoding, based on the value(s) of encoding-related environment vars
|
||||
* (LANG, LC_ALL, LC_CTYPE).
|
||||
*
|
||||
* The first argument (required) is the expected value of the
|
||||
* file.encoding System property.
|
||||
* The second argument (optional) is the value to set to the LANG/etc env vars.
|
||||
*/
|
||||
public class TestFileEncoding {
|
||||
private static final String TEST_NAME = "ExpectedEncoding";
|
||||
|
||||
private String expectedEncoding; // Expected value for file.encoding
|
||||
private String langVar = null; // Value to set for LANG, etc
|
||||
|
||||
private static Set<String> envToRm = HashSet.newHashSet(3);
|
||||
static {
|
||||
// Take these vars out of the test's run environment, possibly adding
|
||||
// our own value back in.
|
||||
envToRm.add("LANG");
|
||||
envToRm.add("LC_ALL");
|
||||
envToRm.add("LC_CTYPE");
|
||||
}
|
||||
|
||||
public TestFileEncoding(String expectedEncoding) {
|
||||
this.expectedEncoding = expectedEncoding;
|
||||
}
|
||||
|
||||
public TestFileEncoding(String expectedEncoding, String langVar) {
|
||||
this.expectedEncoding = expectedEncoding;
|
||||
this.langVar = langVar;
|
||||
}
|
||||
|
||||
/*
|
||||
* Launch ExpectedEncoding with the given parameters, check for the
|
||||
* expected file.encoding.
|
||||
*/
|
||||
private void run() {
|
||||
String testClasses = System.getProperty("test.classes");
|
||||
|
||||
// Pick up VM opts
|
||||
String vmOptsStr = System.getProperty("test.vm.opts");
|
||||
System.out.println("test.vm.opts: " + vmOptsStr);
|
||||
String[] vmOpts = new String[0];
|
||||
if (vmOptsStr != null && !"".equals(vmOptsStr)) {
|
||||
vmOpts = vmOptsStr.split(" ");
|
||||
System.out.println("found vm options:");
|
||||
for (String opt : vmOpts) {
|
||||
System.out.println(" <" + opt + ">");
|
||||
}
|
||||
}
|
||||
|
||||
// Build java cmd
|
||||
LinkedList<String> cmdList = new LinkedList<>();
|
||||
cmdList.add(TestHelper.javaCmd);
|
||||
for (String vmOpt : vmOpts) {
|
||||
if (vmOpt != null && !vmOpt.equals("")) {
|
||||
cmdList.add(vmOpt);
|
||||
}
|
||||
}
|
||||
|
||||
// See if the user specified a file.encoding that we should pass through
|
||||
String userEncoding = System.getProperty("userEncoding");
|
||||
if (userEncoding != null) {
|
||||
cmdList.add("-Dfile.encoding="+userEncoding);
|
||||
}
|
||||
|
||||
cmdList.add("-cp");
|
||||
cmdList.add(testClasses);
|
||||
cmdList.add(TEST_NAME);
|
||||
cmdList.add(expectedEncoding);
|
||||
cmdList.add("skip"); // ignore sun.jnu.encoding for this test
|
||||
|
||||
String cmdArray[] = new String[cmdList.size()];
|
||||
cmdList.toArray(cmdArray);
|
||||
|
||||
// Run the test(s)
|
||||
if (langVar == null) {
|
||||
System.out.println("TestFileEncoding: Running with no envvars set");
|
||||
TestHelper.TestResult tr = TestHelper.doExec(null, envToRm,
|
||||
cmdArray);
|
||||
checkResult(tr);
|
||||
} else {
|
||||
runWithEnvVar("LANG", cmdArray);
|
||||
runWithEnvVar("LC_ALL", cmdArray);
|
||||
runWithEnvVar("LC_CTYPE", cmdArray);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Run the test, setting the environment named by envVarName to the value
|
||||
* in langVar.
|
||||
*/
|
||||
private void runWithEnvVar(String envVarName, String[] cmdArray) {
|
||||
Map<String, String> envToAdd = new HashMap<>(1);
|
||||
TestHelper.TestResult tr = null;
|
||||
|
||||
System.out.println("TestFileEncoding: Running with " + envVarName + "=" + langVar);
|
||||
envToAdd.put(envVarName, langVar);
|
||||
tr = TestHelper.doExec(envToAdd, envToRm, cmdArray);
|
||||
checkResult(tr);
|
||||
}
|
||||
|
||||
private void checkResult(TestHelper.TestResult tr) {
|
||||
System.out.println(tr);
|
||||
if (!tr.isOK()) {
|
||||
throw new RuntimeException("TEST FAILED: !tr.isOK()");
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
TestFileEncoding cfe = null;
|
||||
if (!TestHelper.isMacOSX) {
|
||||
System.out.println("Test is currently only for Mac OS X - pass.");
|
||||
return;
|
||||
}
|
||||
if (args.length == 1) {
|
||||
cfe = new TestFileEncoding(args[0]);
|
||||
} else if (args.length == 2) {
|
||||
cfe = new TestFileEncoding(args[0], args[1]);
|
||||
} else {
|
||||
System.out.println("Usage: TestFileEncoding <expected file.encoding>");
|
||||
System.out.println(" TestFileEncoding <expected file.encoding> <value for LANG/etc env var>");
|
||||
return;
|
||||
}
|
||||
cfe.run();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue