# HG changeset patch # User mullan # Date 1481728922 18000 # Node ID 4327556ae36c8b8349c5ff3eb3228c1f924ccd75 # Parent f13ac1c18eb1a81bd0358ffed24174c2a26a75ce 8165751: NPE hit with java.security.debug=provider Reviewed-by: mullan, weijun Contributed-by: adam.petcher@oracle.com diff -r f13ac1c18eb1 -r 4327556ae36c src/share/classes/java/security/Signature.java --- a/src/share/classes/java/security/Signature.java Tue Mar 14 11:00:09 2017 +0300 +++ b/src/share/classes/java/security/Signature.java Wed Dec 14 10:22:02 2016 -0500 @@ -437,6 +437,10 @@ return this.provider; } + private String getProviderName() { + return (provider == null) ? "(no provider)" : provider.getName(); + } + void chooseFirstProvider() { // empty, overridden in Delegate } @@ -458,7 +462,7 @@ if (!skipDebug && pdebug != null) { pdebug.println("Signature." + algorithm + - " verification algorithm from: " + this.provider.getName()); + " verification algorithm from: " + getProviderName()); } } @@ -507,7 +511,7 @@ if (!skipDebug && pdebug != null) { pdebug.println("Signature." + algorithm + - " verification algorithm from: " + this.provider.getName()); + " verification algorithm from: " + getProviderName()); } } @@ -528,7 +532,7 @@ if (!skipDebug && pdebug != null) { pdebug.println("Signature." + algorithm + - " signing algorithm from: " + this.provider.getName()); + " signing algorithm from: " + getProviderName()); } } @@ -551,7 +555,7 @@ if (!skipDebug && pdebug != null) { pdebug.println("Signature." + algorithm + - " signing algorithm from: " + this.provider.getName()); + " signing algorithm from: " + getProviderName()); } } diff -r f13ac1c18eb1 -r 4327556ae36c test/java/security/Signature/NoProvider.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/security/Signature/NoProvider.java Wed Dec 14 10:22:02 2016 -0500 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2016, 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 8165751 + * @summary Verify that that a subclass of Signature that does not contain a + * provider can be used verify. + * @run main/othervm -Djava.security.debug=provider NoProvider + */ + +import java.security.*; + +public class NoProvider { + + private static class NoProviderPublicKey implements PublicKey { + + public String getAlgorithm() { + return "NoProvider"; + } + public String getFormat() { + return "none"; + } + public byte[] getEncoded() { + return new byte[1]; + } + } + + private static class NoProviderSignature extends Signature { + + public NoProviderSignature() { + super("NoProvider"); + } + + protected void engineInitVerify(PublicKey publicKey) + throws InvalidKeyException { + // do nothing + } + + protected void engineInitSign(PrivateKey privateKey) + throws InvalidKeyException { + // do nothing + } + + protected void engineUpdate(byte b) throws SignatureException { + // do nothing + } + + protected void engineUpdate(byte[] b, int off, int len) + throws SignatureException { + // do nothing + } + + protected byte[] engineSign() throws SignatureException { + return new byte[1]; + } + + protected boolean engineVerify(byte[] sigBytes) + throws SignatureException { + return false; + } + + @Deprecated + protected void engineSetParameter(String param, Object value) + throws InvalidParameterException { + // do nothing + } + + @Deprecated + protected Object engineGetParameter(String param) + throws InvalidParameterException { + return null; + } + } + + public static void main(String[] args) throws Exception { + new NoProviderSignature().initVerify(new NoProviderPublicKey()); + } +}