--- a/jdk/src/share/classes/java/lang/management/ManagementPermission.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/src/share/classes/java/lang/management/ManagementPermission.java Sat Feb 04 07:36:29 2012 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, 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
@@ -46,12 +46,17 @@
* <tr>
* <td>control</td>
* <td>Ability to control the runtime characteristics of the Java virtual
- * machine, for example, setting the -verbose:gc and -verbose:class flag,
- * setting the threshold of a memory pool, and enabling and disabling
- * the thread contention monitoring support.
+ * machine, for example, enabling and disabling the verbose output for
+ * the class loading or memory system, setting the threshold of a memory
+ * pool, and enabling and disabling the thread contention monitoring
+ * support. Some actions controlled by this permission can disclose
+ * information about the running application, like the -verbose:class
+ * flag.
* </td>
* <td>This allows an attacker to control the runtime characteristics
- * of the Java virtual machine and cause the system to misbehave.
+ * of the Java virtual machine and cause the system to misbehave. An
+ * attacker can also access some information related to the running
+ * application.
* </td>
* </tr>
* <tr>
--- a/jdk/src/share/classes/java/util/EnumMap.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/src/share/classes/java/util/EnumMap.java Sat Feb 04 07:36:29 2012 +0000
@@ -106,7 +106,15 @@
/**
* Distinguished non-null value for representing null values.
*/
- private static final Object NULL = new Integer(0);
+ private static final Object NULL = new Object() {
+ public int hashCode() {
+ return 0;
+ }
+
+ public String toString() {
+ return "java.util.EnumMap.NULL";
+ }
+ };
private Object maskNull(Object value) {
return (value == null ? NULL : value);
--- a/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java Sat Feb 04 07:36:29 2012 +0000
@@ -37,8 +37,12 @@
* Linux implementation of HotSpotVirtualMachine
*/
public class LinuxVirtualMachine extends HotSpotVirtualMachine {
- // temp directory for socket file
- private static final String tmpdir = System.getProperty("java.io.tmpdir");
+ // "/tmp" is used as a global well-known location for the files
+ // .java_pid<pid>. and .attach_pid<pid>. It is important that this
+ // location is the same for all processes, otherwise the tools
+ // will not be able to find all Hotspot processes.
+ // Any changes to this needs to be synchronized with HotSpot.
+ private static final String tmpdir = "/tmp";
// Indicates if this machine uses the old LinuxThreads
static boolean isLinuxThreads;
@@ -261,20 +265,12 @@
}
// Return the socket file for the given process.
- // Checks working directory of process for .java_pid<pid>. If not
- // found it looks in temp directory.
private String findSocketFile(int pid) {
- // First check for a .java_pid<pid> file in the working directory
- // of the target process
- String fn = ".java_pid" + pid;
- String path = "/proc/" + pid + "/cwd/" + fn;
- File f = new File(path);
+ File f = new File(tmpdir, ".java_pid" + pid);
if (!f.exists()) {
- // Not found, so try temp directory
- f = new File(tmpdir, fn);
- path = f.exists() ? f.getPath() : null;
+ return null;
}
- return path;
+ return f.getPath();
}
// On Solaris/Linux a simple handshake is used to start the attach mechanism
--- a/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java Sat Feb 04 07:36:29 2012 +0000
@@ -38,11 +38,12 @@
* Solaris implementation of HotSpotVirtualMachine.
*/
public class SolarisVirtualMachine extends HotSpotVirtualMachine {
- // Use /tmp instead of /var/tmp on Solaris as /tmp is the default used by
- // HotSpot when the property is not set on the command line.
- private static final String tmpdir1 = System.getProperty("java.io.tmpdir");
- private static final String tmpdir =
- (tmpdir1.equals("/var/tmp") || tmpdir1.equals("/var/tmp/")) ? "/tmp" : tmpdir1;
+ // "/tmp" is used as a global well-known location for the files
+ // .java_pid<pid>. and .attach_pid<pid>. It is important that this
+ // location is the same for all processes, otherwise the tools
+ // will not be able to find all Hotspot processes.
+ // Any changes to this needs to be synchronized with HotSpot.
+ private static final String tmpdir = "/tmp";
// door descriptor;
private int fd = -1;
@@ -191,19 +192,10 @@
}
}
- // The door is attached to .java_pid<pid> in the target VM's working
- // directory or temporary directory.
+ // The door is attached to .java_pid<pid> in the temporary directory.
private int openDoor(int pid) throws IOException {
- // First check for a .java_pid<pid> file in the working directory
- // of the target process
- String fn = ".java_pid" + pid;
- String path = "/proc/" + pid + "/cwd/" + fn;
- try {
- fd = open(path);
- } catch (FileNotFoundException fnf) {
- path = tmpdir + "/" + fn;
- fd = open(path);
- }
+ String path = tmpdir + "/.java_pid" + pid;;
+ fd = open(path);
// Check that the file owner/permission to avoid attaching to
// bogus process
--- a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c Sat Feb 04 07:36:29 2012 +0000
@@ -40,7 +40,7 @@
#include <stdlib.h>
#include <sys/types.h>
#include <ctype.h>
-#include <wait.h>
+#include <sys/wait.h>
#include <signal.h>
#include <string.h>
#include <errno.h>
--- a/jdk/test/ProblemList.txt Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/test/ProblemList.txt Sat Feb 04 07:36:29 2012 +0000
@@ -284,9 +284,6 @@
# Windows X64, java.lang.IllegalStateException
javax/management/monitor/AttributeArbitraryDataTypeTest.java generic-all
-# 7132199
-sun/management/jmxremote/bootstrap/JvmstatCountersTest.java generic-all
-
############################################################################
# jdk_math
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/EnumMap/UniqueNullValue.java Sat Feb 04 07:36:29 2012 +0000
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2012, 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.
+ */
+
+/*
+ * Portions Copyright (c) 2012, IBM Corporation
+ */
+
+/*
+ * @test
+ * @bug 7123229
+ * @summary (coll) EnumMap.containsValue(null) returns true
+ * @author ngmr
+ */
+
+import java.util.EnumMap;
+import java.util.Map;
+
+public class UniqueNullValue {
+ static enum TestEnum { e00, e01 }
+
+ public static void main(String[] args) {
+ Map<TestEnum, Integer> map = new EnumMap<>(TestEnum.class);
+
+ map.put(TestEnum.e00, 0);
+ if (false == map.containsValue(0)) {
+ throw new RuntimeException("EnumMap unexpectedly missing 0 value");
+ }
+ if (map.containsValue(null)) {
+ throw new RuntimeException("EnumMap unexpectedly holds null value");
+ }
+
+ map.put(TestEnum.e00, null);
+ if (map.containsValue(0)) {
+ throw new RuntimeException("EnumMap unexpectedly holds 0 value");
+ }
+ if (false == map.containsValue(null)) {
+ throw new RuntimeException("EnumMap unexpectedly missing null value");
+ }
+ }
+}
--- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.java Sat Feb 04 07:36:29 2012 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, 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
--- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh Sat Feb 04 07:36:29 2012 +0000
@@ -1,7 +1,7 @@
#! /bin/sh
#
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
--- a/jdk/test/tools/launcher/Arrrghs.java Sat Feb 04 07:29:11 2012 +0000
+++ b/jdk/test/tools/launcher/Arrrghs.java Sat Feb 04 07:36:29 2012 +0000
@@ -24,7 +24,7 @@
/**
* @test
* @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938
- * 6894719 6968053 7067922
+ * 6894719 6968053
* @summary Argument parsing validation.
* @compile -XDignore.symbol.file Arrrghs.java
* @run main Arrrghs
@@ -373,21 +373,6 @@
System.out.println(tr);
}
- /*
- * a missing manifest entry 7067922, we ignore this test for locales
- * which are localized, thus the testing is limited to English locales.
- */
- static void test7067922() {
- if (!isEnglishLocale()) {
- return;
- }
- TestResult tr = null;
- createJar("cvf", "missingmainentry.jar", ".");
- tr = doExec(javaCmd, "-jar", "missingmainentry.jar");
- tr.contains("no main manifest attribute");
- System.out.println(tr);
- }
-
/**
* @param args the command line arguments
* @throws java.io.FileNotFoundException
@@ -400,7 +385,6 @@
runBasicErrorMessageTests();
runMainMethodTests();
test6894719();
- test7067922();
runDiagOptionTests();
if (testExitValue > 0) {
System.out.println("Total of " + testExitValue + " failed");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/MainClassAttributeTest.java Sat Feb 04 07:36:29 2012 +0000
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2012, 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 7067922
+ * @author sogoel
+ * @summary Test negative scenarios for main class attribute
+ * @build MainClassAttributeTest
+ * @run main MainClassAttributeTest
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * This tests negative scenarios for Main class entry in a jar file.
+ * An error should be thrown for each of the test cases when such a
+ * jar is executed.
+ */
+
+public class MainClassAttributeTest extends TestHelper {
+
+ /*
+ * These tests compare messages which could be localized, therefore
+ * these tests compare messages only with English locales, and
+ * for all other locales, the exit values are checked.
+ */
+ static void runTest(File jarFile, String expectedErrorMessage) {
+ TestResult tr = doExec(TestHelper.javaCmd,
+ "-jar", jarFile.getAbsolutePath());
+ if (isEnglishLocale() && !tr.contains(expectedErrorMessage)) {
+ System.out.println(tr);
+ throw new RuntimeException("expected string not found");
+ }
+ if (tr.isOK()) {
+ System.out.println(tr);
+ throw new RuntimeException("test exit with status 0");
+ }
+ }
+
+ // Missing manifest entry
+ static void test1() throws IOException {
+ File jarFile = new File("missingmainentry.jar");
+ createJar("cvf", jarFile.getName(), ".");
+ runTest(jarFile, "no main manifest attribute");
+ }
+
+ // Entry point in manifest file has .class extension
+ static void test2() throws IOException {
+ File jarFile = new File("extensionmainentry.jar");
+ createJar("Foo.class", jarFile, new File("Foo"), (String[])null);
+ runTest(jarFile, "Error: Could not find or load main class");
+ }
+
+ // Entry point in manifest file is misspelled
+ static void test3() throws IOException {
+ File jarFile = new File("misspelledmainentry.jar");
+ createJar("FooMIS", jarFile, new File("Foo"), (String[])null);
+ runTest(jarFile, "Error: Could not find or load main class");
+ }
+
+ // Main-Class attribute is misspelled in manifest file
+ static void test4() throws IOException {
+ File jarFile = new File("misspelledMainAttribute.jar");
+ File manifestFile = new File("manifest.txt");
+ List<String> contents = new ArrayList<>();
+ contents.add("MainClassName: Foo");
+ createFile(manifestFile, contents);
+ createJar("-cmf", manifestFile.getName(), jarFile.getName());
+ runTest(jarFile, "no main manifest attribute");
+ }
+
+ public static void main(String[] args) throws IOException {
+ test1();
+ test2();
+ test3();
+ test4();
+ }
+}