From 93421622ce1ba1bf97d45bca8f346a112c4cf246 Mon Sep 17 00:00:00 2001 From: Fraser Tweedale Date: Fri, 18 Mar 2016 10:53:18 +1100 Subject: Add CRL dist points extension to OIDMap unconditionally It is possible to encounter a case where the CRLDistributionPointsExtension static initialiser, which adds the class to the OIDMap, has not been invoked. This can cause a ClassCastException, e.g. in CRLDistributionPointsExtDefault. Update OIDMap to add CRLDistributionPointsExtension in its own static initialiser. Fixes: https://fedorahosted.org/pki/ticket/2237 --- .../security/x509/CRLDistributionPointsExtension.java | 8 -------- base/util/src/netscape/security/x509/OIDMap.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/base/util/src/netscape/security/x509/CRLDistributionPointsExtension.java b/base/util/src/netscape/security/x509/CRLDistributionPointsExtension.java index d8dee03a7..1cfb770df 100644 --- a/base/util/src/netscape/security/x509/CRLDistributionPointsExtension.java +++ b/base/util/src/netscape/security/x509/CRLDistributionPointsExtension.java @@ -178,14 +178,6 @@ public class CRLDistributionPointsExtension extends Extension ///////////////////////////////////////////////////////////// public static final String NAME = "CRLDistributionPoints"; - static { - try { - OIDMap.addAttribute(CRLDistributionPointsExtension.class.getName(), - OID, NAME); - } catch (CertificateException e) { - } - } - @Override public String toString() { return NAME; diff --git a/base/util/src/netscape/security/x509/OIDMap.java b/base/util/src/netscape/security/x509/OIDMap.java index 4cebcf2c8..20765c934 100644 --- a/base/util/src/netscape/security/x509/OIDMap.java +++ b/base/util/src/netscape/security/x509/OIDMap.java @@ -99,6 +99,7 @@ public class OIDMap { static { loadNames(); loadClasses(); + addClass(CRLDistributionPointsExtension.class); } // Load the default name to oid map (EXTENSIONS_OIDS) @@ -227,6 +228,22 @@ public class OIDMap { } } + /** + * Add an extension to the OIDMap. + * + * Assumes existence of static OID and NAME fields with unique values. + */ + public static void addClass(Class clazz) { + try { + addAttribute(clazz.getName(), + (String) clazz.getField("OID").get(null), + (String) clazz.getField("NAME").get(null)); + } catch (Throwable e) { + System.out.println( + "Error adding class " + clazz.getName() + " to OIDMap: " + e); + } + } + /** * Add a name to lookup table. * -- cgit