diff --git a/src/share/classes/sun/security/tools/KeyTool.java b/src/share/classes/sun/security/tools/KeyTool.java index e99c40d9d8ce2002d865dadcd9bbc9ad14af79c5..ca2d6a384ab8f0a627c2a69e2e23ed6e82b36ef3 100644 --- a/src/share/classes/sun/security/tools/KeyTool.java +++ b/src/share/classes/sun/security/tools/KeyTool.java @@ -1910,7 +1910,9 @@ public final class KeyTool { 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 @@ public final class KeyTool { X509CertImpl.INFO); CertificateExtensions exts = (CertificateExtensions) certInfo.get(X509CertInfo.EXTENSIONS); - printExtensions(rb.getString("Extensions: "), exts, out); + if (exts != null) { + printExtensions(rb.getString("Extensions: "), exts, out); + } } } diff --git a/test/sun/security/tools/keytool/NoExtNPE.sh b/test/sun/security/tools/keytool/NoExtNPE.sh new file mode 100644 index 0000000000000000000000000000000000000000..3e929b5354f8040c008ca88e56151171ea13d1e6 --- /dev/null +++ b/test/sun/security/tools/keytool/NoExtNPE.sh @@ -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 $?