Index: net/base/x509_certificate_openssl.cc |
diff --git a/net/base/x509_certificate_openssl.cc b/net/base/x509_certificate_openssl.cc |
index 2be38dd0518e310d3ad065051fb5088d9e5d818a..0b273d592250d840364609c15a3107ead0d58e93 100644 |
--- a/net/base/x509_certificate_openssl.cc |
+++ b/net/base/x509_certificate_openssl.cc |
@@ -209,16 +209,20 @@ class X509InitSingleton { |
int der_cache_ex_index() const { return der_cache_ex_index_; } |
X509_STORE* store() const { return store_.get(); } |
+ void ResetStore() { |
+ store_.reset(X509_STORE_new()); |
+ DCHECK(store_.get()); |
+ X509_STORE_set_default_paths(store_.get()); |
+ // TODO(joth): Enable CRL (see X509_STORE_set_flags(X509_V_FLAG_CRL_CHECK)). |
+ } |
+ |
private: |
friend struct DefaultSingletonTraits<X509InitSingleton>; |
- X509InitSingleton() |
- : der_cache_ex_index_((base::EnsureOpenSSLInit(), |
- X509_get_ex_new_index(0, 0, 0, 0, |
- DERCache_free))), |
- store_(X509_STORE_new()) { |
+ X509InitSingleton() { |
+ base::EnsureOpenSSLInit(); |
+ der_cache_ex_index_ = X509_get_ex_new_index(0, 0, 0, 0, DERCache_free); |
DCHECK_NE(der_cache_ex_index_, -1); |
- X509_STORE_set_default_paths(store_.get()); |
- // TODO(joth): Enable CRL (see X509_STORE_set_flags(X509_V_FLAG_CRL_CHECK)). |
+ ResetStore(); |
} |
int der_cache_ex_index_; |
@@ -305,6 +309,11 @@ void X509Certificate::Initialize() { |
nxou::ParseDate(X509_get_notAfter(cert_handle_), &valid_expiry_); |
} |
+// static |
+void X509Certificate::ResetStore() { |
+ Singleton<X509InitSingleton>::get()->ResetStore(); |
+} |
+ |
SHA1Fingerprint X509Certificate::CalculateFingerprint(OSCertHandle cert) { |
SHA1Fingerprint sha1; |
unsigned int sha1_size = static_cast<unsigned int>(sizeof(sha1.data)); |