JDK-6502478 : java.security.cert.CertificateFactory.generateCertPath throws wrong exception in JDK7 b03
  • Type: Bug
  • Component: security-libs
  • Sub-Component: java.security
  • Affected Version: 7
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: generic
  • CPU: generic
  • Submitted: 2006-12-08
  • Updated: 2012-03-22
  • Resolved: 2006-12-09
Related Reports
Duplicate :  
Description
JCK            : JCK6a b01
J2SE           : FAIL - dolphin b03, PASS mustang b104
Platform[s]    : FAIL - seems to be all
switch/Mode    : FAIL - default

Negative test api/java_security/cert/CertificateFactory/index.html#generate[CertificateFactory2019] fails because Dolphin throws ClassCastException instead of CertificateException  on attempt of creating CertPath from a list of String oblects. According to specification any error should be CertificateException.

Error message is:

java.lang.ClassCastException: java.lang.String cannot be cast to java.security.cert.X509Certificate
	at sun.security.provider.certpath.X509CertPath.<init>(X509CertPath.java:97)
	at sun.security.provider.X509Factory.engineGenerateCertPath(X509Factory.java:375)
	at java.security.cert.CertificateFactory.generateCertPath(CertificateFactory.java:387)
	at javasoft.sqe.tests.api.java.security.cert.CertificateFactory.generateTests.CertificateFactory2019(generateTests.java:509)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:406)
	at javasoft.sqe.jck.lib.ProviderTest.invokeTestCase(ProviderTest.java:281)
	at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:195)
	at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:127)
	at javasoft.sqe.tests.api.java.security.cert.CertificateFactory.generateTests.main(generateTests.java:210)

steps to reproduce:

run the following code on JDK 6 and JDK 7:

import java.util.*;
import java.security.cert.*;

public class CF{

public static void main(String[] args){

        List certs = new Vector();
        certs.add("The first certificate");
        certs.add("The third certificate");
        certs.add("The second certificate");
        certs.add("The fourth certificate");
        try {
	    CertificateFactory cf = CertificateFactory.getInstance( "X509", "SUN");
            CertPath cp = cf.generateCertPath( certs);
            System.out.println("CertificateException has not been thrown on attempt to generate Certificate Path from a List of strings");
        } catch(CertificateException ce) {
            System.out.println("Expected exception "+ce);
		ce.printStackTrace();
        }
         catch(Exception c) {
            System.out.println("UNexpected exception "+c);
		c.printStackTrace();
        }  
    }
}

C:\tests\CertFactory>Z:/Links/stt/jdk_promotions/JDK6.0/b104/binaries/windows-i586/jdk1.6.0/bin/java -showversion -cp . CF
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) Client VM (build 1.6.0-rc-b104, mixed mode)

Expected exception java.security.cert.CertificateException: List is not all X509Certificates: java.lang.String
java.security.cert.CertificateException: List is not all X509Certificates: java.lang.String
        at sun.security.provider.certpath.X509CertPath.<init>(X509CertPath.java:99)
        at sun.security.provider.X509Factory.engineGenerateCertPath(X509Factory.java:375)
        at java.security.cert.CertificateFactory.generateCertPath(CertificateFactory.java:387)
        at CF.main(CF.java:15)

C:\tests\CertFactory>pause
Press any key to continue . . .

C:\tests\CertFactory>Z:/Links/stt/jdk_promotions/JDK7.0/b03/binaries/windows-i586/jdk1.7.0/bin/java -showversion -cp . CF
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b03)
Java HotSpot(TM) Client VM (build 1.7.0-ea-b03, mixed mode)

UNexpected exception java.lang.ClassCastException: java.lang.String cannot be cast to java.security.cert.X509Certificate
java.lang.ClassCastException: java.lang.String cannot be cast to java.security.cert.X509Certificate
        at sun.security.provider.certpath.X509CertPath.<init>(X509CertPath.java:97)
        at sun.security.provider.X509Factory.engineGenerateCertPath(X509Factory.java:375)
        at java.security.cert.CertificateFactory.generateCertPath(CertificateFactory.java:387)
        at CF.main(CF.java:15)

Comments
EVALUATION It's a duplicate of bug 6492692. The bug fix of 6492692 is available now, and will putback into next build.
09-12-2006