Merge
authorvaleriep
Thu, 05 Mar 2009 11:44:40 -0800
changeset 2181 4b9176c37982
parent 2180 9994f4f08a59 (current diff)
parent 2179 e172c13ca87a (diff)
child 2182 d128c94494c8
child 2183 8eb97a6368b8
Merge
--- a/jdk/src/share/classes/java/lang/Class.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/lang/Class.java	Thu Mar 05 11:44:40 2009 -0800
@@ -3059,14 +3059,12 @@
     }
 
 
-    private static Annotation[] EMPTY_ANNOTATIONS_ARRAY = new Annotation[0];
-
     /**
      * @since 1.5
      */
     public Annotation[] getAnnotations() {
         initAnnotationsIfNecessary();
-        return annotations.values().toArray(EMPTY_ANNOTATIONS_ARRAY);
+        return AnnotationParser.toArray(annotations);
     }
 
     /**
@@ -3074,7 +3072,7 @@
      */
     public Annotation[] getDeclaredAnnotations()  {
         initAnnotationsIfNecessary();
-        return declaredAnnotations.values().toArray(EMPTY_ANNOTATIONS_ARRAY);
+        return AnnotationParser.toArray(declaredAnnotations);
     }
 
     // Annotations cache
--- a/jdk/src/share/classes/java/lang/reflect/Constructor.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/Constructor.java	Thu Mar 05 11:44:40 2009 -0800
@@ -626,13 +626,11 @@
         return (T) declaredAnnotations().get(annotationClass);
     }
 
-    private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
-
     /**
      * @since 1.5
      */
     public Annotation[] getDeclaredAnnotations()  {
-        return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
+        return AnnotationParser.toArray(declaredAnnotations());
     }
 
     private transient Map<Class, Annotation> declaredAnnotations;
--- a/jdk/src/share/classes/java/lang/reflect/Field.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/Field.java	Thu Mar 05 11:44:40 2009 -0800
@@ -1018,13 +1018,11 @@
         return (T) declaredAnnotations().get(annotationClass);
     }
 
-    private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
-
     /**
      * @since 1.5
      */
     public Annotation[] getDeclaredAnnotations()  {
-        return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
+        return AnnotationParser.toArray(declaredAnnotations());
     }
 
     private transient Map<Class, Annotation> declaredAnnotations;
--- a/jdk/src/share/classes/java/lang/reflect/Method.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/Method.java	Thu Mar 05 11:44:40 2009 -0800
@@ -705,13 +705,11 @@
         return (T) declaredAnnotations().get(annotationClass);
     }
 
-    private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
-
     /**
      * @since 1.5
      */
     public Annotation[] getDeclaredAnnotations()  {
-        return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
+        return AnnotationParser.toArray(declaredAnnotations());
     }
 
     private transient Map<Class, Annotation> declaredAnnotations;
--- a/jdk/src/share/classes/java/net/SocketPermission.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/net/SocketPermission.java	Thu Mar 05 11:44:40 2009 -0800
@@ -113,7 +113,6 @@
  * <p>Similarly, if the following permission:
  *
  * <pre>
- *   p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept");
  *   p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");
  * </pre>
  *
--- a/jdk/src/share/classes/java/util/ArrayList.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/java/util/ArrayList.java	Thu Mar 05 11:44:40 2009 -0800
@@ -179,7 +179,6 @@
         modCount++;
         int oldCapacity = elementData.length;
         if (minCapacity > oldCapacity) {
-            Object oldData[] = elementData;
             int newCapacity = (oldCapacity * 3)/2 + 1;
             if (newCapacity < minCapacity)
                 newCapacity = minCapacity;
--- a/jdk/src/share/classes/sun/misc/ClassLoaderUtil.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/sun/misc/ClassLoaderUtil.java	Thu Mar 05 11:44:40 2009 -0800
@@ -77,8 +77,6 @@
                 jarsClosed.clear();
             }
 
-            System.out.println ("classLoader = " + classLoader);
-            System.out.println ("SharedSecrets.getJavaNetAccess()="+SharedSecrets.getJavaNetAccess());
             URLClassPath ucp = SharedSecrets.getJavaNetAccess()
                                                 .getURLClassPath(classLoader);
             ArrayList loaders = ucp.loaders;
--- a/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java	Thu Mar 05 11:44:40 2009 -0800
@@ -788,4 +788,16 @@
         for (int i = 0; i < length; i++)
             skipMemberValue(buf);
     }
+
+    /*
+     * This method converts the annotation map returned by the parseAnnotations()
+     * method to an array.  It is called by Field.getDeclaredAnnotations(),
+     * Method.getDeclaredAnnotations(), and Constructor.getDeclaredAnnotations().
+     * This avoids the reflection classes to load the Annotation class until
+     * it is needed.
+     */
+    private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
+    public static Annotation[] toArray(Map<Class, Annotation> annotations) {
+        return annotations.values().toArray(EMPTY_ANNOTATION_ARRAY);
+    }
 }
--- a/jdk/src/share/classes/sun/security/provider/SeedGenerator.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/sun/security/provider/SeedGenerator.java	Thu Mar 05 11:44:40 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2009 Sun Microsystems, Inc.  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
@@ -68,6 +68,9 @@
 import java.util.Properties;
 import java.util.Enumeration;
 import java.net.*;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Path;
+import java.util.Random;
 import sun.security.util.Debug;
 
 abstract class SeedGenerator {
@@ -180,10 +183,27 @@
 
                         // The temporary dir
                         File f = new File(p.getProperty("java.io.tmpdir"));
-                        String[] sa = f.list();
-                        for(int i = 0; i < sa.length; i++)
-                            md.update(sa[i].getBytes());
-
+                        int count = 0;
+                        DirectoryStream<Path> ds
+                                = f.toPath().newDirectoryStream();
+                        try {
+                            // We use a Random object to choose what file names
+                            // should be used. Otherwise on a machine with too
+                            // many files, the same first 1024 files always get
+                            // used. Any, We make sure the first 512 files are
+                            // always used.
+                            Random r = new Random();
+                            for (Path path: ds) {
+                                if (count < 512 || r.nextBoolean()) {
+                                    md.update(path.getName().toString().getBytes());
+                                }
+                                if (count++ > 1024) {
+                                    break;
+                                }
+                            }
+                        } finally {
+                            ds.close();
+                        }
                     } catch (Exception ex) {
                         md.update((byte)ex.hashCode());
                     }
--- a/jdk/src/share/classes/sun/security/tools/KeyTool.java	Tue Mar 03 19:50:59 2009 -0800
+++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java	Thu Mar 05 11:44:40 2009 -0800
@@ -1910,7 +1910,9 @@
             ObjectIdentifier oid = attr.getAttributeId();
             if (oid.equals(PKCS9Attribute.EXTENSION_REQUEST_OID)) {
                 CertificateExtensions exts = (CertificateExtensions)attr.getAttributeValue();
-                printExtensions(rb.getString("Extension Request:"), exts, out);
+                if (exts != null) {
+                    printExtensions(rb.getString("Extension Request:"), exts, out);
+                }
             } else {
                 out.println(attr.getAttributeId());
                 out.println(attr.getAttributeValue());
@@ -2495,7 +2497,9 @@
                                                            X509CertImpl.INFO);
             CertificateExtensions exts = (CertificateExtensions)
                     certInfo.get(X509CertInfo.EXTENSIONS);
-            printExtensions(rb.getString("Extensions: "), exts, out);
+            if (exts != null) {
+                printExtensions(rb.getString("Extensions: "), exts, out);
+            }
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh	Thu Mar 05 11:44:40 2009 -0800
@@ -0,0 +1,65 @@
+#
+# Copyright 2009 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# @test
+# @bug 6813402
+# @summary keytool cannot -printcert entries without extensions
+#
+# @run shell NoExtNPE.sh
+
+# set a few environment variables so that the shell-script can run stand-alone
+# in the source directory
+if [ "${TESTSRC}" = "" ] ; then
+   TESTSRC="."
+fi
+
+if [ "${TESTJAVA}" = "" ] ; then
+   echo "TESTJAVA not set.  Test cannot execute."
+   echo "FAILED!!!"
+   exit 1
+fi
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+  SunOS )
+    FILESEP="/"
+    ;;
+  Linux )
+    FILESEP="/"
+    ;;
+  Windows* )
+    FILESEP="\\"
+    ;;
+  * )
+    echo "Unrecognized system!"
+    exit 1;
+    ;;
+esac
+
+${TESTJAVA}${FILESEP}bin${FILESEP}keytool \
+	-list -v \
+	-keystore ${TESTSRC}${FILESEP}CloneKeyAskPassword.jks \
+	-storepass test123
+
+exit $?