changeset 5013:e528a64dd21b

Merge
author chegar
date Sat, 04 Feb 2012 07:36:29 +0000
parents bbadb6605a1c 24478d62d068
children ce5ffdb2be25
files
diffstat 11 files changed, 204 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/management/ManagementPermission.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/src/share/classes/java/util/EnumMap.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/src/solaris/native/java/lang/UNIXProcess_md.c	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/test/ProblemList.txt	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/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/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/test/tools/launcher/Arrrghs.java	Sat Feb 04 07:29:11 2012 +0000
+++ b/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/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();
+    }
+}